当我试图像这篇文章一样进行粉碎堆栈漏洞利用时:http ://www.cs.wright.edu/people/faculty/tkprasad/courses/cs781/alephOne.html ,我遇到了一个需要将堆栈指针转换为字符串。
我知道如何以十六进制格式(使用 printf)打印出 int,但不知道如何将其存储为内部字符串表示形式。我需要将它作为字符串在内部存储,以便我可以将它传递给 memcpy 函数。
我需要的理论函数是下面的“convertFromIntToHexCharStar”。
unsigned long NOPSledPointer = get_sp() + 150;
char * address = convertFromIntToHexCharStar(NOPSledPointer);
它旨在将此函数用作参数。它给出了堆栈指针。
unsigned long get_sp(void) {
__asm__("movl %esp,%eax");
}
我想将堆栈指针转换为十六进制字符*,这样我就可以像这样执行 memcpy:
char buffer[517];
/* Initialize buffer with 0x90 (NOP instruction) */
memset(&buffer, 0x90, 517);
/* Fill the buffer with appropriate contents here */
memcpy((void*) buffer, (void*) address, 4);
我需要用十六进制表示的地址填充内存,因为我知道它在过去有效。
因此,我要寻求的是帮助将其转换为字符串,或者另一种更简单的方法来执行此 NOP 雪橇(这是我要解决的真正问题)。我打算多次填写地址,这样会增加覆盖堆栈上的返回地址的几率,但为简洁起见,我只给出了一行代码,将“地址”写入“缓冲区”。
我已经搜索了 stackoverflow 和谷歌,但找不到任何东西。在此先感谢您的帮助!