Значения 0Xnumber в инструкциях по сборке mov и add - PullRequest
0 голосов
/ 10 октября 2018
0000000000400ee0 <phase_1>:
  400ee0:   48 83 ec 08             sub    $0x8,%rsp
  400ee4:   be 00 24 40 00          mov    $0x402400,%esi
  400ee9:   e8 4a 04 00 00          callq  401338 <strings_not_equal>
  400eee:   85 c0                   test   %eax,%eax
  400ef0:   74 05                   je     400ef7 <phase_1+0x17>
  400ef2:   e8 43 05 00 00          callq  40143a <explode_bomb>
  400ef7:   48 83 c4 08             add    $0x8,%rsp
  400efb:   c3                      retq   

Выше приведен код сборки функции, которая сравнивает входную строку пользователя и фиксированную строку, заданную программой.

Мой вопрос заключается в том, что в mov $0x402400,%esi почему инструкция не сохраняет десятичное значение, а именно, 4 * 16 ^ 5 + 2 * 16 ^ 3 + 4 * 16 ^ 1 в %esi,Вместо этого он фактически сохраняет этот адрес $0x402400 в %esi.Итак, является ли $0x402400 целочисленным значением, которое не может быть разыменовано или по которому содержимое памяти не может быть проверено) или адресом, по которому мы можем проверить содержимое (разыменование)?

И почему в этоминструкция add $0x8,%rsp, $0x8 является целочисленным значением 8 для сохранения в регистре?Почему в данном случае это не адрес, который мы можем разыменовать?

PS: Любая ссылка на четкое определение, подобное учебнику, будет очень цениться.

...