gpt4 book ai didi

将十六进制数转换为十六进制转义字符数组

转载 作者:行者123 更新时间:2023-11-30 16:33:31 25 4
gpt4 key购买 nike

我正在尝试创建一个 shellcode,我希望用户将一个整数值作为端口传递,该端口作为参数出现,然后将此 shellcode 值与实际的 shellcode 一起放置。为了实现第一步,我编写了这段代码。

  1. 使用 atoi() 将参数转换为数字
  2. 使用 htons() 将数字转换为主机和网络字节顺序

    无符号短整型端口 = htons(atoi(argv[1]));

    因此,如果我传递 ./a.out 9000,则端口变量将存储值 2823(这是 9000 的十六进制值)

  3. 我的下一个目标是将 2823 存储到字符数组中,就像小端字节序一样,以便字符数组以十六进制转义格式存储值,如下所示

    无符号字符端口[]="\x23\x28"

那么如何将端口中的十六进制数转换为十六进制转义字符串并将其存储到 char[] 数组中而不进行硬编码?

我看过很多关于将其打印为“\x23\x28”格式的示例,但我还没有看到任何有关如何以该格式存储的示例。我已经尝试过使用 sscanf 如下所示,但无法实现我想要的效果。

sscanf(port_shellcode,"\\x",port);

最佳答案

我不知道有这样的内置函数,但你可以自己做:

#define CONVERT_TO_ESCAPED_HEX(n, s) \
do { \
char ts[100] = { '\0' }; \
int i; \
for (i = 0; i < sizeof(n) / sizeof(char); i++) \
{ \
sprintf(s, "\\x%02x%s", ((n >> (8 * i)) & 0xff), ts); \
sprintf(ts, "%s", s); \
} \
} while(0)
...
short port = 9000;
char s[100];
CONVERT_TO_ESCAPED_HEX(port, s);
printf("%s\n", s);

关于将十六进制数转换为十六进制转义字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49717824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com