C 将字符串地址解析为小尾端
我和我的搭档正在尝试使用C语言返回libc漏洞,我们必须处理的一个步骤是解析以字符串格式提供给little endian的地址 例如,我们以字符串形式给出一个地址,如下所示:C 将字符串地址解析为小尾端,c,string-parsing,libc,endianness,C,String Parsing,Libc,Endianness,我和我的搭档正在尝试使用C语言返回libc漏洞,我们必须处理的一个步骤是解析以字符串格式提供给little endian的地址 例如,我们以字符串形式给出一个地址,如下所示: "ffffb4a2" 最终需要看起来像: "\xa2\xb4\xff\xff" 因此,我们可以将其反馈到我们的程序中,以便在余下的开发中使用。巧妙地使用memcpy,如: memcpy(subbuff1, &address[6], 2); subbuff1[2] = '\0'; memcpy(subbuff2,
"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”都会导致它出现轻微的异常。我相信有一个简单的方法可以做到这一点,但我和我的搭档正在努力
有没有一种简单的方法可以将这样一个地址解析成小的Endian?只需将其作为足够长度的十六进制数读取,或者使用适当的指针格式:
0xffffb4a2
sprintf()或snprintf()手册是您的朋友。您想要“\xa2\xb4\xff\xff”还是“a2b4ffff”?如果是字符串格式的地址,为什么要使用\x将以下十六进制值转换为单个字符?字符串“\x41\x62”定义了一个字符串“Ab”。此外,您假设“ffff”不需要交换,但在(比如)“ffee”的情况下,它会交换。阅读手册页本身就是一项技能。我将花一些时间处理snprintf(),看看我发现了什么。这并没有满足交换Endian的要求format@WeatherVane:我猜他们的目标是little endian,在这种情况下,我们就完成了。OP已经明确地将其输入和输出字符串表示法反向显示。@WeatherVane:“
ffffffb4a2
”那是他们打印的字符串。解析为一个数字,即0xffffb4a2
。现在,如果他们的目标是little endian,那么这4个八位字节将像a2 b4 ff ff
那样存储。小恩迪安,这…可能就是我要找的。我不完全确定,因为正如重复数据消除者所说,它似乎不是小endian。我们现在正在玩这个。
void* p;
sscanf(yourstringhere, "%p", &p);
0xffffb4a2