4

我有以下 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
4

3 回答 3

7

这是一个编译器助手函数__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

有关更多详细信息,请参见此处

这不是程序员写的代码,你找错地方了。

于 2012-06-08T10:56:43.180 回答
2

如果这真的是你的代码,你可以让 OllyDbg 显示相应的 C 代码,方法是右键单击 CPU 窗口,进入Comments子菜单并选择Show source. 要完成这项工作,您需要属于可执行文件的 pdb 文件。

我不确定 Olly1.X 是否已经支持该功能,但 2.X 版本肯定可以支持。

于 2012-06-04T18:30:18.663 回答
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 方面不够流利,无法为您提供更好的说明。同样,我不会过于依赖这个,因为我可能完全错了。

于 2012-06-04T18:20:16.383 回答