Próbuję przeanalizować plik COM MS-DOS, który napisałem kilka lat temu za pomocą IDA Free 5.0, od tego czasu zmieniłem nazwę segmentu na code_and_data
i nazwałam stałe oraz ustawiłem typy danych prawidłowo. Jednak patrząc na demontaż, otrzymuję pseudo-instrukcje db
na liście, na przykład:
code_and_data: 0106 replace_irq_handler:; XREF DANYCH: 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_interrupt: cmpdata_interrupt: 3bdata_kod: 3bEhc: 'code_and_data: 0116 jnz krótki call_original_dos_interrupt_handlercode_and_data: 0118 db 3Ehcode_and_data: 0118 cmp byte ptr ds: 3C2h' K'code_and_data: 011E jnz krótki call_original_dos_interrupt_handlercode_and_data: 0120 db 3Ehcode_and_data: 0120 cmp byte ptr ds: 3C4h „O'code_and_data: 0126 jnz krótki call_original_dos_interrupt_handlercode_and_data: 0128 db 3Ehcode_and_data: 0128 cmp bajt ptr ds: 3C6h, 'N'code_and_da ta: 012E jnz short call_original_dos_interrupt_handlercode_and_data: 0130 push StartOfIndexTablecode_and_data: 0133 pop bx
Rozumiem, że nie ma tam żadnych dodatkowych bajtów, ponieważ db
i cmp
instrukcja po rozpoczęciu od tego samego adresu (patrz lewa kolumna). Dlaczego IDA wyświetla / dodaje te pseudo-instrukcje db
?
Czy istnieje sposób, aby powiedzieć mu, aby ich nie pokazywał, czy też jest powód, dla którego może to być przydatne (mogę się tylko domyślać, że ponieważ ten sam segment jest używany zarówno do kodu, jak i do danych, stara się być „pomocny” i pokaż kod również jako dane)?
Ale jeśli tak, to dlaczego pokazuje tylko pierwszy bajt instrukcji (jeśli spojrzysz ponownie na adresy po lewej stronie, te instrukcje są dłuższe niż 1 bajt).