【发布时间】:2018-05-06 17:21:48
【问题描述】:
假设您有一个接受命令行参数的二进制可执行文件。
./process in
在这种情况下,输入是:'i' = 0x69,'n' = 0x6E
有没有我可以传递 特定字节 作为输入,而不是 ASCII?
也就是我要传0xF9。
0xF9 = 11111001
请注意,我无法在屏幕上输入任何 ASCII 字符(据我所知)以二进制计算为 1111 1001(因为 ASCII 被限制在 0-127 的范围内)。
但是,我希望这个可执行文件接收字节 0xF9 作为输入。
可执行文件是固定的;我没有它的源代码,也无法修改。
【问题讨论】:
-
不清楚您要做什么,因为程序参数是以 nul 结尾的字符串。
-
字符串是一个字符数组。一个字符就是一个字节。我希望有一个字符,那个字节是“1111 1001”。 (当然,后面是一个空值)。
-
argv 是一个指向字节数组的指针数组,而不是 ASCII 字符。你可以随心所欲地解释这些字节。
-
我不知道这是否有帮助,但在 Windows 控制台中,您可以通过按住 Alt 键并在此 在键盘上输入其十进制值来输入字符值案例
249. -
如果你使用 Bash 作为你的 shell,那么
$’\xF9’应该将字符(字节)传递给你的程序。唯一不能出现在参数中的字符(字节)是空字节。这严格地标志着争论的结束。