【发布时间】:2019-07-21 18:51:06
【问题描述】:
我得到了一个小字节串,其十六进制表示形式如下:
6631C08A2500000000
是否有一个反汇编程序,它接受操作码作为直接输入参数,而不需要编译文件?
例如:
$ disassembler -directOpcode 6631C08A2500000000
0: 66 31 c0 xor ax,ax
3: 8a 25 00 00 00 00 mov ah,BYTE PTR ds:0x0
【问题讨论】:
-
如果您可以将其转换为实际的二进制文件(如 hex undump),您可以将其提供给
ndisasm -b 64或其他任何内容。或者objdump具有反汇编平面二进制文件的选项。您当然可以制作一个采用 cmd 行 arg 并使用 tmp 文件的包装脚本。 PS:您不需要也不应该以 root 身份运行它。 -
很好的提示!谢谢!将其制定为答案,我会接受!我用
ndisasm -b64 <(python -c "print '\x66\x31\xC0\x8A\x25\x00\x00\x00\x00'" )做到了,这很容易编写脚本!非常感谢! -
您可以自己编写一个完整的答案,使用一个工作脚本将
6631C0...转换为'\x66\x31\xC0...',或者您真正想要的任何内容。 -
似乎我的问题表述得不够好。我基本上只是想通过将它作为字符串传递给程序来反汇编 shell 中的一个小操作码片段。我不知道
ndisasm并且无法让objdump在没有文件的情况下执行此操作。 -
哦,我没有意识到
objdump -b binary不会从标准输入或像<( something )这样的命名管道中读取。 (Disassembling A Flat Binary File Using objdump)。无论如何,仍然可以自己写一个答案。
标签: linux debugging x86 x86-64 disassembly