Отладка во FreeBSD_AMD64

Тема в разделе "WASM.X64", создана пользователем ofCros, 18 дек 2007.

  1. ofCros

    ofCros New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    25
    Недавно занялся экспериментами под FreeBSD_AMD64 на asm и столкнулся с проблемой, чем код отлаживать.

    Под Linux (x86) хоть что то есть, например неплохой отладчик "EDB", да связка GDB/Insight способна машинный код показывать.
    А под FreeBSD_AMD64 отлаживать остаётся только "GDB" . Почитав документацию написал скрипт для GDB, который поместил в ".gdbinit", получилось что-то вроде интерактивной отладки.
    Код (Text):
    1.  RAX=0000000000000000  RBX=0000000000000000  RCX=00000000004000B0
    2.  RDX=0000000000523408  RSI=0000000000000000  RDI=00000000FFFFE8E0
    3.  RBP=0000000000000000  RSP=00000000FFFFE8D8  RIP=00000000004000B2
    4.          r9=00000000FFFFE8D8  r10=0000000080818718  r11=0000000000000302
    5.         r12=0000000000000000  r13=0000000000000000  r14=0000000000000000
    6.         r15=0000000000000000
    7. ----------------------------------registers------------------------------------
    8. 00000000FFFFE8D8: 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
    9. 00000000FFFFE8D8: 30 EB FF FF FF 7F 00 00 00 00 00 00 00 00 00 00
    10. 00000000FFFFE8D8: 56 EB FF FF FF 7F 00 00 6C EB FF FF FF 7F 00 00
    11. 00000000FFFFE8D8: 87 EB FF FF FF 7F 00 00 98 EB FF FF FF 7F 00 00
    12. ----------------------------------Hex-Dump-------------------------------------
    13. 0x4000b2 <Start+2>:     mov    edx,0x14
    14. 0x4000b7 <Start+7>:     lea    rsi,ds:0x10001a
    15. 0x4000be <Start+14>:    mov    edi,0x1
    16. 0x4000c3 <Start+19>:    mov    eax,0x4
    17. 0x4000c8 <Start+24>:    syscall
    18. 0x4000ca <Start+26>:    int    0x3
    19. 0x4000cc <Start+28>:    xor    edi,edi
    20. 0x4000ce <Start+30>:    mov    eax,0x1
    21. 0x4000d3 <Start+35>:    syscall
    22. 0x4000d5:       add    BYTE PTR [rax],al
    23. 0x4000d7:       add    BYTE PTR [rax+101],cl
    24. 0x4000da:       ins    es:[edi],[dx]
    25. (gdb)
    http://slil.ru/25244714


    Мой .gdbinit
    Код (Text):
    1. set disassembly-flavor intel
    2. set history save on
    3.  
    4. #-----Vivod-registrov-kak-v-SoftIce
    5. define u
    6. printf " RAX=%016lX  RBX=%016lX  RCX=%016lX  |  CS=%04X\n RDX=%016lX  RSI=%016lX  RDI=%016lX  |  DS=%04X\n RBP=%016lX  RSP=%016lX  RIP=%016lX  |  SS=%04X\n   r9=%016lX  r10=%016lX  r11=%016lX |  ES=%04X\n  r12=%016lX  r13=%016lX  r14=%016lX |  FS=%04X\n  r15=%016lX                                             |  GS=%04X\n",$rax,$rbx,$rcx,(char*)$cs,$rdx,$rsi,$rdi,(char*)$ds,$rbp,$rsp,$rip,(char*)$ss,$r9,$r10,$r11,(char*)$es,$r12,$r13,$r14,(char*)$fs,$r15,(char*)$gs
    7. printf "----------------------------------registers------------------------------------\n"
    8.  
    9.  set $Start_addr = $rsp
    10.  
    11.  set $hex_loop = 0
    12.        while $hex_loop < 4
    13.          set $hex_c = 0
    14.        printf "%016lX:",$Start_addr
    15.      
    16.          while $hex_c++ < 16
    17.           printf " %02X",*(unsigned char*)$Start_addr
    18.          set $Start_addr++
    19.          end
    20.          echo \n
    21.          set $hex_loop++
    22.        end
    23.     printf "----------------------------------Hex-Dump-------------------------------------\n"
    24.   x/12i $rip
    25. end
    26.  
    27. #Ne zahldim v Call
    28. define f8
    29.   ni
    30.   u
    31. end
    32.  
    33. #Zahodim v Call
    34. define f7
    35.   si
    36.   u
    37. end
    38.  
    39. #
    40. define r
    41.   b Start
    42.   set height 30
    43.   run
    44.   u
    45. end
    Это пример для консоли (25x80), в X можно переписать чтоб вывода было намного больше.
    Интересно узнать кто нибуть занимается тем же ?