【发布时间】:2018-04-08 12:28:40
【问题描述】:
我正在尝试创建一个 shellcode,我希望用户在其中传递一个整数值作为端口作为参数,然后将此 shellcode 值与实际的 shellcode 一起放置。为了实现第一步,我写了这段代码。
- 使用 atoi() 将参数转换为数字
-
使用 htons() 将数字转换为主机和网络字节顺序
unsigned short int port = htons(atoi(argv[1]));所以如果我传递 ./a.out 9000,端口变量会存储一个值 2823(即 9000 的十六进制值)
-
我的下一个目标是将 2823 存储到一个字符数组中,就像一个小端序一样,这样字符数组就可以像这样以十六进制转义格式存储值
unsigned char port[]="\x23\x28"
那么如何将端口中的十六进制数字转换为十六进制转义字符串并将其存储到 char[] 数组中而不进行硬编码?
我已经看到很多关于将其打印为 "\x23\x28" 格式的示例,但我还没有看到任何关于如何以该格式存储的示例。我已经尝试过使用如下所示的 sscanf,但无法实现我想要的确切效果。
sscanf(port_shellcode,"\\x",port);
【问题讨论】:
-
如果您无法回答问题,请不要对答案投反对票。否决票很容易,但给出答案却很难。
标签: c escaping string-formatting shellcode