直接在 shell 中反汇编操作码片段?

问题描述 投票:0回答:2

我得到了一个小字节串,其十六进制表示形式如下:

6631C08A2500000000

是否有反汇编程序,它接受操作码作为直接输入参数,而不需要编译文件?

例如:

$ disassembler -directOpcode 6631C08A2500000000      

0:  66 31 c0                xor    ax,ax
3:  8a 25 00 00 00 00       mov    ah,BYTE PTR ds:0x0 
linux debugging x86 x86-64 disassembly
2个回答
2
投票

由于 Peter 的有用评论,我找到了一个利用 python2 和一些 shell 管道的解决方案:

$ python -c "print '6631C08A2500000000'.decode('hex')" | head -c -1 | ndisasm -b32 -

00000000  6631C0            xor ax,ax
00000003  8A2500000000      mov ah,[dword 0x0]

我用

head -c -1
来去掉尾随的换行符,否则我得到:

00000000  6631C0            xor ax,ax
00000003  8A2500000000      mov ah,[dword 0x0]
00000009  0A                db 0x0a

0
投票

尝试来自 capstone 项目的 cstool。

安装cstool:

$ sudo apt install capstone-tool

反汇编你的代码:

$ cstool x64att '6631C08A2500000000'
0  66 31 c0                            xorw     %ax, %ax
3  8a 25 00 00 00 00                   movb  0(%rip), %ah
© www.soinside.com 2019 - 2024. All rights reserved.