Jag försöker analysera en MS-DOS COM-fil som jag skrev för några år sedan med IDA Free 5.0, sedan dess har jag bytt namn på segmentet till code_and_data
och namngett konstanter och ställt in datatyper korrekt. Men när man tittar på demonteringen får jag db
pseudo-instruktioner i listan, så här:
code_and_data: 0106 replacement_irq_handler:; DATA XREF: start + 81ocode_and_data: 0106 clicode_and_data: 0107 push bxcode_and_data: 0108 db 3Ehcode_and_data: 0108 cmp byte ptr ds: 3BEh, 'C'code_and_data: 010E jnz short call_original_dos_interst__data 'code_and_data: 0116 jnz short call_original_dos_interrupt_handlercode_and_data: 0118 db 3Ehcode_and_data: 0118 cmp byte ptr ds: 3C2h,' K'code_and_data: 011E jnz short call_original_dos_interrupt_handlercode_and call_original_dos_interrupt_handlercode_and_data: 0128 db 3Ehcode_and_data: 0128 cmp byte ptr ds: 3C6h, 'N'code_and_da ta: 012E jnz kort call_original_dos_interrupt_handlercode_and_data: 0130 push StartOfIndexTablecode_and_data: 0133 pop bx
Jag förstår att det inte finns några ytterligare byte där, eftersom db
och cmp
instruktion efter att den börjar på samma adress (se vänster kolumn). Varför visar / lägger IDA till db
pseudo-instruktioner?
Finns det något sätt att säga att det inte ska visas, eller finns det en anledning till att det kan vara användbart (jag kunde bara gissa att eftersom samma segment både används för kod och data, försöker det vara "användbart" och visa koden också som data)?
Men i så fall, varför visar den bara den första byten i instruktionen (om du tittar på adresserna till vänster igen är dessa instruktioner längre än 1 byte).