что именно делает эта сборка? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть код ассемблера, который я читаю, и в нем есть следующая часть:

    mov    $0x28,%esi
    mov    %rax,%rdi
    callq  <strchr@plt>
    mov    %rax,%rbx
    test   %rax,%rax
    jne     somewhere

У меня возникли некоторые трудности в этом коде.Первый ход перемещается 0x28 для регистрации %esi.Второй перемещается %rax в %rdi, а затем делает strchr(char *rdi, char *esi).Таким образом, в основном он возвращает указатель на первое вхождение после ascii 0x28, которое равно '('.Затем последний тест говорит мне, что он проверяет, имеет ли строка в rdi символ '('.Если нет, то test %rax, %rax будет устанавливать ZeroFlags, а jne не будет выполняться.Правильно ли мое понимание?

Еще один вопрос, который у меня возникает, - когда я пытаюсь проверить, что именно находится в %esi после первого mov, я использую команду p (char *)$esi в gdb, но получаювыход <error: Cannot access memory at address 0x28>.Может кто-нибудь посоветовать мне, как я могу просмотреть содержимое $esi?

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