Я просмотрел руководство ref.x86asm.net, и хотя в нем много информации, я не могу сделать из этого орел или решку, так как я не знаю, как интерпретировать регистры.
Я использую 64-битный код и имею соседнюю строку, в которой lldb показывает мне следующее:
48 89 e5 movq %rsp, %rbp
Из приведенного выше утверждения я знаю, что 89 — это команда перемещения. rsp — это источник, а rbp — пункт назначения (у меня osx).
в руководстве ref.86asm для «89» указано, что o имеет «r», а op1 имеет r / m16/32/64. op2 имеет r16/32/64 Я посмотрел значения, но действительно не понимаю, как все это должно работать. Я видел ссылки на REX в ответах других людей, но не знаю, что это значит.
XX 89 XX movq %rax, %rdi ; Как мне это сделать? Что такое ХХ?
Я пишу свой собственный байт-код и почти во всем разобрался, написав c, скомпилировав его, а затем просмотрев его в lldb. Однако я бы сэкономил много времени, если бы мог лучше понять, как на самом деле работают байтовые коды, когда они ссылаются на регистры.
mov
, но важным моментом является то, что ваш 3-й байт — это байт ModR/M, а первый байт — это префикс REX. - person Peter Cordes   schedule 12.08.201648
=>, это префикс REX, указывающий, что инструкция работает с%rax
, а не%eax
. Без префикса REX48
89 E5
будет декодироваться какmovd %esp, %ebp
. .. Второй XX - это байт ModR/M. - person Ped7g   schedule 12.08.2016