2012-06-04 38 views
2

我有以下ASM代码(OllyDbg),它应该包含在c中开发的结构。有人能告诉我在c编程语言中结构如何吗?也许有一点解释你如何找出存储在结构中的什么地方等等......ASM到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

不,我确实知道结构,因为我开发了一个具有这种结构的小型C程序。由于我学习OllyDbg和ASM技能,我目前无法检测到这里的结构。这不是一个功课:)我失业多年... –

+0

为了证明我说的是实话...结构由三个int构成。但是我无法从ollydbg –

+0

这段代码中找出它们的代码是什么? ASM显示编译后的代码,没有数据结构。有时候你可以从ASM中推导出结构,而不是(很容易)。 – kay

回答

2

如果这确实是您的代码,您可以通过右键进入CPU窗口,进入Comments子菜单并选择Show source,使OllyDbg显示相应的C代码。为了做到这一点,你需要属于可执行文件的pdb文件。

我不确定Olly1.X是否已经支持该功能,但是2.X版本肯定能够这样做。

+0

我在与exe文件相同的文件夹中有pdb文件,但只要选择显示源,所有注释都将被删除,代码不会出现。我正在使用OllyDbg的最新2.01 alpha版本 –

+0

好吧。我看到3个mov操作。 –

+1

我想你必须将pdb文件保存在编译器生成的位置,因为完整的pdb路径包含在二进制文件中,所以Olly将搜索pdb文件最初写入的任何位置。 – athre0z

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给你更好的澄清。再次,我不会过分依赖这一点,因为我可能完全错误。

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

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

+0

你是如何得出这个结论的?你刚刚认出了OP的asm作为SEH_prolog还是在OP的文章中给了你一些洞察力? – vincentleest

+2

@vincentleest:是的,我认出了这段代码。 –

相关问题