无法弄清楚这段错误

试图在Linux中发出一个execve()系统调用来触摸一个名为“一切正常”的文件

这里是堆栈:

0xffffd33c: 0x6e69622f  0x756f742f  0x45006863  0x79726576

0xffffd34c: 0x6e696874  0x73692067  0x004b4f20  0x00000000

0xffffd35c: 0xf7ff000a  0x00000001  0x080483a0  0x00000000

0xffffd36c: 0x080483c1  0x08048454  0x00000001  0xffffd394

这应该是little-endian命令的“/ bin / touch 0Everything OK 0”后跟一个空字节,看起来是这样。

这里是寄存器:

eax            0xfffffff2       -14
ecx            0xffffd33c       -11460
edx            0x0  0
ebx            0xffffd33c       -11460
esp            0xffffd33c       0xffffd33c

EAX为11(用于execve()linux系统调用),之后int 0x80引起了一个错误,将EAX的值更改为-14

我无法弄清楚为什么我的指针(存储在ebx,ecx中)导致execve()的参数发生格式错误。 它们指向相同的数据,但是它是一个以null结尾的字符串,后跟第二个以NULL结尾的字符串,后面跟着一个NULL指针,所以它应该只被eXX处理为第一个字符串,并被ECX指定为NULL指针终止数组。

谢谢。


你对ecx价值是错误的。 你的代码似乎做的是相当于

char *arg[] = {"/bin/touch", "Everything is OK", 0};
execve(arg[0], arg[0], 0);

但它应该是:

execve(arg[0], arg, 0);

看到不同? ecx应该包含指向参数指针列表的地址,而不是指向第一个参数的指针。

链接地址: http://www.djcxy.com/p/89855.html

上一篇: Can't figure out this segfault

下一篇: Incorrect output to Fibonacci series in MASM