Есть ли отладчик на ассемблере для OS X? - PullRequest
4 голосов
/ 18 ноября 2009

Так что мне было интересно, есть ли такие? Я знаю AFD на Windows, но не уверен, что-нибудь о Mac?

И вот как я использую nasam для следующего кода: nasm a.asm -o a.com -l a.lst

[org 0x100]
mov ax, 5
mov bx, 10
add ax, bx
mov bx, 15
add ax, bx
mov ax, 0x4c00
int 0x21 

В Windows я знаю имя отладчика afd, которое помогает мне проходить через каждое утверждение, но не уверен, как мне это сделать, используя gdb

И я тоже не могу выполнить этот файл .com, я должен сделать какой-то другой файл здесь?

Ответы [ 4 ]

11 голосов
/ 18 ноября 2009

Почему вы пишете 16-битный код, который делает системные вызовы DOS? Если вы хотите узнать, как написать asm, применимый к вашей ОС, взгляните на код, сгенерированный "gcc -S" для некоторого кода на C ... быть собранным с as вместо nasm)

Далее, вы знаете, что делает этот код? Это звучит так:

ax = 5
bx = 10
ax += bx
bx = 15
ax += bx
ax = 0x4c00
int 21h

Похоже, этот код эквивалентен:

mov bx, 15
mov ax, 4c00
int 21h

Что согласно тому, что я вижу здесь , равно exit(0). Вам не нужно менять bx либо ...

Но. Это даже не относится к тому, что вы пытались сделать, потому что Mac OS X не является MS-DOS, не знает об API DOS, не может запускать файлы .COM и т. Д. Я даже не знал, что он может работать 16-битный код. Вы захотите взглянуть на опцию -f elf в nasm и захотите использовать регистры, такие как <b>e</b>ax вместо ax.

.

Я не делал программирования на ассемблере в OS X, но теоретически вы могли бы сделать что-то вроде этого:

extern exit
global main
main:
    push dword 0
    call exit

    ; This will never get called, but hey...
    add esp, 4
    xor eax, eax
    ret

Тогда:

nasm -f elf foo.asm -o foo.o
ld -o foo foo.o -lc

Конечно, это зависит от библиотеки C, чего вы, возможно, не захотите делать. Я опустил «полную» версию, потому что я не знаю, как выглядит интерфейс системного вызова на Mac. На многих платформах вашей точкой входа является символ _start, и вы делаете системные вызовы с int 80h или sysenter.

Что касается отладки ... Я бы также предложил GDB. Вы можете перейти с помощью одной команды с помощью stepi, и команда info registers выведет состояние регистра. Команда disassemble также полезна.

Обновление: Только что вспомнил, я не думаю, что Mac OS X использует ELF ... Ну ... Многое из того, что я написал, все еще применимо. : -)

7 голосов
/ 18 ноября 2009

Xcode поставляется с GDB , отладчиком GNU.
Xcode 4 и новее поставляются вместо LLDB.

1 голос
/ 19 ноября 2009

Как уже говорили другие, используйте GDB, отладчик gnu. При отладке исходного кода сборки я обычно нахожу полезным загрузить командный файл, который содержит что-то вроде следующего:

display/5i $pc
display/x $eax
display/x $ebx
...

display/5i отобразит 5 инструкций, начиная со следующей, которая должна быть выполнена. Вы можете использовать команду stepi для пошагового выполнения одной инструкции за раз. display/x $eax отображает содержимое регистра eax в шестнадцатеричном формате. Вы также можете использовать команду x для проверки содержимого памяти: x/x $eax, например, печатает содержимое памяти, адрес которой хранится в eax.

Это несколько из многих команд. Загрузите руководство по GDB и просмотрите его, чтобы найти другие команды, которые могут вас заинтересовать.

0 голосов
/ 18 ноября 2009

IDA Pro работает на Mac по-разному (пользовательский интерфейс все еще работает в Windows; см. пример ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...