Недавно занялся экспериментами под FreeBSD_AMD64 на asm и столкнулся с проблемой, чем код отлаживать. Под Linux (x86) хоть что то есть, например неплохой отладчик "EDB", да связка GDB/Insight способна машинный код показывать. А под FreeBSD_AMD64 отлаживать остаётся только "GDB" . Почитав документацию написал скрипт для GDB, который поместил в ".gdbinit", получилось что-то вроде интерактивной отладки. Код (Text): RAX=0000000000000000 RBX=0000000000000000 RCX=00000000004000B0 RDX=0000000000523408 RSI=0000000000000000 RDI=00000000FFFFE8E0 RBP=0000000000000000 RSP=00000000FFFFE8D8 RIP=00000000004000B2 r9=00000000FFFFE8D8 r10=0000000080818718 r11=0000000000000302 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=0000000000000000 ----------------------------------registers------------------------------------ 00000000FFFFE8D8: 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00000000FFFFE8D8: 30 EB FF FF FF 7F 00 00 00 00 00 00 00 00 00 00 00000000FFFFE8D8: 56 EB FF FF FF 7F 00 00 6C EB FF FF FF 7F 00 00 00000000FFFFE8D8: 87 EB FF FF FF 7F 00 00 98 EB FF FF FF 7F 00 00 ----------------------------------Hex-Dump------------------------------------- 0x4000b2 <Start+2>: mov edx,0x14 0x4000b7 <Start+7>: lea rsi,ds:0x10001a 0x4000be <Start+14>: mov edi,0x1 0x4000c3 <Start+19>: mov eax,0x4 0x4000c8 <Start+24>: syscall 0x4000ca <Start+26>: int 0x3 0x4000cc <Start+28>: xor edi,edi 0x4000ce <Start+30>: mov eax,0x1 0x4000d3 <Start+35>: syscall 0x4000d5: add BYTE PTR [rax],al 0x4000d7: add BYTE PTR [rax+101],cl 0x4000da: ins es:[edi],[dx] (gdb) http://slil.ru/25244714 Мой .gdbinit Код (Text): set disassembly-flavor intel set history save on #-----Vivod-registrov-kak-v-SoftIce define u 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 printf "----------------------------------registers------------------------------------\n" set $Start_addr = $rsp set $hex_loop = 0 while $hex_loop < 4 set $hex_c = 0 printf "%016lX:",$Start_addr while $hex_c++ < 16 printf " %02X",*(unsigned char*)$Start_addr set $Start_addr++ end echo \n set $hex_loop++ end printf "----------------------------------Hex-Dump-------------------------------------\n" x/12i $rip end #Ne zahldim v Call define f8 ni u end #Zahodim v Call define f7 si u end # define r b Start set height 30 run u end Это пример для консоли (25x80), в X можно переписать чтоб вывода было намного больше. Интересно узнать кто нибуть занимается тем же ?