我和我的合作伙伴正在尝试在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