雖然我正在嘗試像這篇文章:http://www.cs.wright.edu/people/faculty/tkprasad/courses/cs781/alephOne.html一樣進行碎片堆棧利用,但遇到了需要將堆棧指針轉換爲字符串的問題。將int轉換爲十六進制格式的字符串
我知道如何以十六進制格式(使用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雪橇(這是我真正想要解決的問題)。我要多次填寫地址,這樣會增加覆蓋堆棧上返回地址的機率,但爲了簡潔起見,我只給出了將「address」寫入「buffer」的一行代碼。
我已經搜索過stackoverflow &谷歌,找不到任何東西。在此先感謝您的幫助!
'sprintf'就像'printf'一樣工作,但將結果放入字符串中。 – Gene