将字符串地址解析为little endian

时间:2014-10-27 23:18:46

标签: 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, &address[4], 2);
subbuff2[2] = '\0';
.....strcat(subbuff1, subbuff2);

和一些正确的null终止符我们可以得到一些看起来像:

"a2b4ffff"

我们的程序完全不喜欢。在我们尝试的任何容量中使用“\ x”会导致它有轻微的怪异。我确信有一个简单的方法可以做到这一点,但我的伙伴和我正在努力。

有没有一种简单的方法可以将像这样的地址解析为Little Endian?

1 个答案:

答案 0 :(得分:2)

只需将其读作长度足够的十六进制数,或者使用适当的指针格式:

  1. strtoll

    long long n = strtoll(yourstringhere, 0, 16);
    void* p = (void*)n;
    
  2. sscanf

    void* p;
    sscanf(yourstringhere, "%p", &p);
    
  3. 或者嵌入十六进制文字:

    0xffffb4a2