我有以下ASM代码(OllyDbg),它应该包含用c开发的结构。有人能告诉我结构在c编程语言中是怎么样的吗?也许稍微解释一下你如何弄清楚结构中存储的内容等等......
非常感谢!
CPU Disasm
Address Hex dump Command Comments
6A27F058 /$ 68 E9A6286A PUSH 6A28A6E9 ; Entry point
6A27F05D |. 64:FF35 00000 PUSH DWORD PTR FS:[0]
6A27F064 |. 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10]
6A27F068 |. 896C24 10 MOV DWORD PTR SS:[ESP+10],EBP
6A27F06C |. 8D6C24 10 LEA EBP,[ESP+10]
6A27F070 |. 2BE0 SUB ESP,EAX
6A27F072 |. 53 PUSH EBX
6A27F073 |. 56 PUSH ESI
6A27F074 |. 57 PUSH EDI
6A27F075 |. A1 E067336A MOV EAX,DWORD PTR DS:[6A3367E0]
6A27F07A |. 3145 FC XOR DWORD PTR SS:[EBP-4],EAX
6A27F07D |. 33C5 XOR EAX,EBP
6A27F07F |. 50 PUSH EAX
6A27F080 |. 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
6A27F083 |. FF75 F8 PUSH DWORD PTR SS:[EBP-8]
6A27F086 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
6A27F089 |. C745 FC FEFFF MOV DWORD PTR SS:[EBP-4],-2
6A27F090 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
6A27F093 |. 8D45 F0 LEA EAX,[EBP-10]
6A27F096 |. 64:A3 0000000 MOV DWORD PTR FS:[0],EAX
6A27F09C \. C3 RETN
答案 0 :(得分:6)
这是函数__SEH_prolog4
,它是用于设置每个函数异常处理程序的编译器帮助程序。这是库中的列表(RunTmChk.lib / sehprolg4.obj):
.text:00000000 __SEH_prolog4 proc near
.text:00000000
.text:00000000 arg_4 = dword ptr 8
.text:00000000
.text:00000000 68 60 00 00 00 push offset __except_handler4
.text:00000005 64 FF 35 00 00 00+ push large dword ptr fs:0
.text:0000000C 8B 44 24 10 mov eax, [esp+8+arg_4]
.text:00000010 89 6C 24 10 mov [esp+8+arg_4], ebp
.text:00000014 8D 6C 24 10 lea ebp, [esp+8+arg_4]
.text:00000018 2B E0 sub esp, eax
.text:0000001A 53 push ebx
.text:0000001B 56 push esi
.text:0000001C 57 push edi
.text:0000001D A1 64 00 00 00 mov eax, ds:___security_cookie
.text:00000022 31 45 FC xor [ebp-4], eax
.text:00000025 33 C5 xor eax, ebp
.text:00000027 50 push eax
.text:00000028 89 65 E8 mov [ebp-18h], esp
.text:0000002B FF 75 F8 push dword ptr [ebp-8]
.text:0000002E 8B 45 FC mov eax, [ebp-4]
.text:00000031 C7 45 FC FE FF FF+ mov dword ptr [ebp-4], 0FFFFFFFEh
.text:00000038 89 45 F8 mov [ebp-8], eax
.text:0000003B 8D 45 F0 lea eax, [ebp-10h]
.text:0000003E 64 A3 00 00 00 00 mov large fs:0, eax
.text:00000044 C3 retn
.text:00000044 __SEH_prolog4 endp
有关详细信息,请参阅here。
这不是程序员编写的代码,你看错了地方。
答案 1 :(得分:2)
如果这确实是您的代码,您可以通过右键单击CPU窗口,输入Comments
子菜单并选择Show source
,使OllyDbg显示相应的C代码。要完成这项工作,您需要属于可执行文件的pdb文件。
我不确定Olly1.X是否已经支持,但2.X版本肯定能够这样做。
答案 2 :(得分:1)
我不完全确定,因为我看过C / ASM已经有一段时间了。但是在看了一眼之后,这里有一些想法。请记住,我不会过分依赖它,但它可能有所帮助。
查看ASM的这一部分:
6A27F07F |. 50 PUSH EAX
6A27F080 |. 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
6A27F083 |. FF75 F8 PUSH DWORD PTR SS:[EBP-8]
6A27F086 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
6A27F089 |. C745 FC FEFFF MOV DWORD PTR SS:[EBP-4],-2
6A27F090 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
6A27F093 |. 8D45 F0 LEA EAX,[EBP-10]
基于帧指针偏移量,我猜测结构包含2个INT和1个LONG或DOUBLE。
不幸的是,我目前在X86中不够流利,无法为您提供更好的说明。同样,我不会过分依赖这一点,因为我可能完全错了。