我和我的合作伙伴正在嘗試在C語言中使用return-to-libc漏洞,我們不得不處理的一個步驟是將字符串格式的地址解析爲little endian。將字符串地址解析成little endian
因此,例如,我們在字符串中給出組成,看起來像一個地址:
"ffffb4a2"
這需要結束看起來像:
"\xa2\xb4\xff\xff"
所以我們可以給它回到我們程序的其餘部分的利用。一個聰明的使用memcpy像:
memcpy(subbuff1, &address[6], 2);
subbuff1[2] = '\0';
memcpy(subbuff2, &address[4], 2);
subbuff2[2] = '\0';
.....strcat(subbuff1, subbuff2);
和一些適當的空終結,我們可以得到的東西看起來像:
"a2b4ffff"
其中我們的節目不喜歡的。在我們嘗試過的任何種類的容量中使用「\ x」會導致它有一個小小的怪異。我確信有一個簡單的方法可以做到這一點,但我和我的夥伴正在掙扎。
有沒有簡單的方法來解析這樣的地址到Little Endian?
的sprintf()或的snprintf()的手冊是你的朋友。 – wildplasser 2014-10-27 23:23:28
你想要「\ xa2 \ xb4 \ xff \ xff」或「a2b4ffff」嗎?如果它是字符串格式的地址,爲什麼使用\ x將以下十六進制值轉換爲單個字符?字符串「\ x41 \ x62」定義了一個字符串「Ab」。另外,你假定「ffff」不需要交換,但是在(比如說)「ffee」的情況下,它會。 – 2014-10-27 23:33:50
閱讀手冊頁本身就是一項技能。我會花一些時間處理snprintf(),看看我找到了什麼。 – OneManRiot 2014-10-28 00:07:00