我有以下组装线:

....
LEA   EAX, DWORD PTR DS:[0x404212]
MOV   DWORD PTR SS:[EBP-0x3CC], EAX
PUSH  DWORD PTR SS:[EBP-0x3CC]
...
...
...
LEA   EAX, DWORD PTR DS:[0x404213]
MOV   DWORD PTR SS:[EBP-0x3D0], EAX
PUSH  DWORD PTR SS:[EBP-0x3D0]
...
...


所以,我问自己如何将这段代码翻译成C之类的高级语言?还是伪C语言?

但是,对于这两个块,我有以下内容:

 UNKNOWNTYPE *eax_pointer_1;     //points to 00404212
 UNKNOWNTYPE *eax_pointer_2;     //points to 00404213


在ollydbg中,我看到了地址00404212有以下一行:

ADD BYTE PTR DS:[EAX], DH


,在地址00404213处有:

XOR BYTE PTR DS:[EAX], AL


所以我的问题是:这是正确的转换吗?您是否知道如何将00404212和00404213中的指令转换为伪C语言的一部分?

评论

如果确定这些指针指向函数(而不是数据),则UNKNOWNTYPE *是函数指针。要“使它们成为整个代码的一部分”,请将指向的指令也转换为单独的函数。

好的,谢谢您的回答。

#1 楼


在ollydbg中,我看到在地址00404212上有以下行:

ADD BYTE PTR DS:[EAX], DH


在地址00404213上有:

XOR BYTE PTR DS:[EAX], AL



我不认为这些是代码,而是变量,它们在代码/执行部分中吗?

评论


不,它们不在代码/执行部分中。我只能通过在ollydbg上单击鼠标右键,然后单击“转到->表达式”来跳转到这两个地址。

–user3097712
2014年8月31日23:13



好吧,这使我之前的评论无效。检查此时的数据以猜测指针的类型。

–杂件
2014年9月1日下午6:33

这两行是参数指向的数据段,它毫无用处,无法将em转换为asm指令!

– Abr001am
2015年9月4日在4:47

#2 楼

看起来正在获取某物(也许是数组元素)的地址,并且该地址正被用来建立调用框架以供以后使用。大致类似的东西:

void f(void){
  void *x = &someMemory;
  void *y = &someMemory2;

  g(y,x);
}


凹形吊环。