一些流水线的理解

逆向工程 部件
2021-07-02 11:21:19

我有以下装配线:

....
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

所以我的问题是:这是正确的转换吗?你知道如何将0040421200404213 中的指令作为我转换为伪 C 语言的一部分吗?

2个回答

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

ADD BYTE PTR DS:[EAX], DH

并且,在地址处00404213,有:

XOR BYTE PTR DS:[EAX], AL

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

看起来某个东西(可能是一个数组元素)的地址正在被使用,并且被用来设置调用框架以供以后使用。东西大致是:

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

  g(y,x);
}

告诫讲师。