我正在尝试分析几年前使用 IDA Free 5.0 编写的 MS-DOS COM 文件,此后我将该段重code_and_data
命名为常量并正确设置数据类型。但是,在查看反汇编时,我db
在列表中得到了伪指令,如下所示:
code_and_data:0106 replacement_irq_handler: ; 数据外部参照:开始+81o 代码和数据:0106 cli code_and_data:0107 推送 bx 代码和数据:0108 分贝 3Eh code_and_data:0108 cmp 字节 ptr ds:3BEh, 'C' code_and_data:010E jnz short call_original_dos_interrupt_handler 代码和数据:0110 分贝 3Eh code_and_data:0110 cmp 字节 ptr ds:3C0h, 'A' code_and_data:0116 jnz short call_original_dos_interrupt_handler 代码和数据:0118 分贝 3Eh code_and_data:0118 cmp 字节 ptr ds:3C2h, 'K' code_and_data:011E jnz short call_original_dos_interrupt_handler 代码和数据:0120 分贝 3Eh code_and_data:0120 cmp 字节 ptr ds:3C4h, 'O' code_and_data:0126 jnz short call_original_dos_interrupt_handler 代码和数据:0128 分贝 3Eh code_and_data:0128 cmp 字节 ptr ds:3C6h, 'N' code_and_data:012E jnz short call_original_dos_interrupt_handler code_and_data:0130 推送 StartOfIndexTable code_and_data:0133 pop bx
我知道那里没有额外的字节,因为db
和之后的cmp
指令从相同的地址开始(见左栏)。为什么 IDA 显示/添加这些db
伪指令?
有什么方法可以告诉它不显示那些,或者有什么理由让它可能有用(我只能猜测,因为同一个段同时用于代码和数据,它试图“有用”并显示也编码为数据)?
但是如果是这样,为什么只显示指令的第一个字节(如果再看左边的地址,这些指令都长于1个字节)。