Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何处理外壳代码中的3字节地址_C_Assembly - Fatal编程技术网

C 如何处理外壳代码中的3字节地址

C 如何处理外壳代码中的3字节地址,c,assembly,C,Assembly,我将按照本教程中的说明进行操作: 当我进入“p系统” 第二部分,我可以得到一个地址,但它是一个3字节的地址0xffffff。本教程显示了4字节地址,生成的外壳代码需要4字节 现在,我在外壳代码的3字节地址的末尾和开头添加了\x90 nop代码,但都没有起到作用 操作系统是32位Centos 6ish您可以使用您获得的地址。如果您发现0x123456,请使用\x00\x12\x34\x56在24位系统上可以看到3字节的地址。你真的有24位系统吗?您声称有一个32位系统。@DavidHeffern

我将按照本教程中的说明进行操作:

当我进入“p系统”

第二部分,我可以得到一个地址,但它是一个3字节的地址0xffffff。本教程显示了4字节地址,生成的外壳代码需要4字节

现在,我在外壳代码的3字节地址的末尾和开头添加了\x90 nop代码,但都没有起到作用


操作系统是32位Centos 6ish

您可以使用您获得的地址。如果您发现
0x123456
,请使用
\x00\x12\x34\x56

在24位系统上可以看到3字节的地址。你真的有24位系统吗?您声称有一个32位系统。@DavidHeffernan,3字节地址不是有效的4字节地址吗?@CarlNorum什么是0x00?那是零字节地址吗?或者一个单字节地址。我可能是想提醒询问者认识到他的系统没有3字节地址,所有地址都是4字节地址。谢谢大家的回复。我只是不明白为什么系统会用3个字节来表示一个4字节的地址。但不管怎样,我还是同意大卫和丹的建议。我在开头(如上所示)和结尾添加了\x00(只是为了见鬼)。不行。这是实际地址:0x16c1d0,用于“系统”。“0xbffff918”表示“/bin/bash”。外壳代码是\x00\xd0\xc1\x16\TEST\x18\xf9\xff\xbf。我在0x5416c1d0处遇到一个segfault。没有作者建议的bash提示。想法?我忘了恩迪亚斯,很抱歉。基于segfault地址,它有一个额外的
0x54
(ASCII
T
),我认为您的外壳代码应该是
\xd0\xc1\x16\x00TEST\x18\xf9\xff\xbf
。如果这不起作用,您可能需要用
memcpy
替换
strcpy
strcat
——但请注意,显然,如果您依赖于由于
strcpy
而导致的缓冲区溢出,并且负载中(而不是最后)有一个ASCII NUL,不管你怎么做,你都会有问题的。这就是我担心的。我确实尝试过这种技术,但是我会尝试用memcpy重新编译。好主意,谢谢@user1197457你真的认为你有一台24位的机器吗?@DavidHeffernan不,我不这么认为。我想这是一台32位的机器。这就是为什么我不明白为什么我在看一个24位地址。如果您能指出正确的答案,我将不胜感激。否则我想我没有24位的机器。