什么参数使这种比较成为现实?

时间:2018-05-02 00:25:53

标签: assembly x86 reverse-engineering intel

显然这里存在漏洞吗?也许不是,或者它只是直截了当?

 arg_4           = dword ptr  0Ch

 push    ebp
 mov     ebp, esp
 mov     eax, [ebp+arg_4]
 mov     ecx, [eax+0Ch]
 movsx   edx, byte ptr [ecx+2]
 cmp     edx, 4Dh

假设我控制了这个函数的参数,那么这个比较的值是什么?让我难以置信的是:

mov eax [ebp+arg_4]
mov ecx, [eax+0Ch]

如果我控制arg_4(我认为这是一个参数?)那么我可以随心所欲地制作eax。 但是...... eax被用作下一行的ADDRESS !!我怎么能期望预测地址(从而控制进入ecx的内容)?每次运行时地址都会有所不同....

我是否理解错误的内容?

1 个答案:

答案 0 :(得分:2)

在C:

char *a[] = { 0, 0, 0, "xxM" };
f(0, a);