显然这里存在漏洞吗?也许不是,或者它只是直截了当?
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的内容)?每次运行时地址都会有所不同....
我是否理解错误的内容?
答案 0 :(得分:2)
在C:
char *a[] = { 0, 0, 0, "xxM" };
f(0, a);