C语言 如何转换十六进制地址从一个字符缓冲区写入内存



我在这里得到了这个函数,它是从主函数调用的:

void overflow(char *arg)
{
    char buf[1369];
    strcpy (buf, arg);
    printf ("Thank you for contacting customer service. You are so important to us that we wrote a program to serve you.n");
    printf ("Please hold for %u minutes while I drop your calln", (int)strlen(buf));
    return;
} 

字符串*arg来自argv[1]

当我这样做的时候:


./overflow1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa29390408

堆栈是这样的:


0xffffce80: 0x07    0x00    0x00    0x61    0x61    0x61    0x61    0x61
0xffffce88: 0x61    0x61    0x61    0x61    0x61    0x61    0x61    0x61
0xffffce90: 0x61    0x61    0x61    0x61    0x61    0x61    0x61    0x61
0xffffce98: 0x61    0x61    0x61    0x61    0x61    0x61    0x61    0x61
0xffffcea0: 0x61    0x61    0x61    0x61    0x61    0x61    0x61    0x61
0xffffcea8: 0x61    0x61    0x61    0x61    0x61    0x61    0x61    0x61
0xffffceb0: 0x61    0x61    0x61    0x61    0x61    0x61    0x61    0x61
0xffffceb8: 0x61    0x61    0x61    0x61    0x61    0x61    0x61    0x61
0xffffcec0: 0x61    0x61    0x32    0x39    0x33    0x39    0x30    0x34
0xffffcec8: 0x30    0x38

那么我怎么得到:

0x32 0x39 0x33 0x39 0x30 0x34 0x30 0x38

:

29 39 04 08

?

我确实意识到这需要从实际十六进制值转换为字母数字值,例如08,但网络上的每个字符串工具都没有给我结果,因为08不是ascii/字母数字值。

如果您想将任意字节作为参数发送给命令,则必须在shell中对它们进行转义。例如,在bash中可以这样做:

echo $'ax09bx33c'

它会显示:

a       b3c

因为bash将$ "结构中的xHH(两个十六进制数字)解释为单字节十六进制值。0x09为制表符,0x33为数字3。

相关内容

  • 没有找到相关文章

最新更新