Что такое инструкция asm & ldquo; jmpq * 0xa48201 (% rip) & rdquo; точно делаете? [Дубликат]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
11
задан nrz 27 November 2013 в 21:19
поделиться

2 ответа

В Intel, JMP, CALL и т. д. относятся к программному счетчику команды next .

Следующая инструкция в вашем случае была в 0x4003be и 0x4003be + 0x2004a2 == 0x600860

19
ответ дан Employed Russian 19 August 2018 в 03:16
поделиться
  • 1
    Ah, поэтому формула Current address + Value before (%rip) + Current Instruction Size. благодаря – RouteMapper 27 November 2013 в 21:23
  • 2
    И для тех, кто задается вопросом о & quot; q & quot; в jmpq он просто обозначает размер операнда (q означает квадрат) в синтаксисе AT & amp; T / GAS. – Nickolay 20 January 2014 в 00:10
  • 3
    - & GT; 0x100000ebb: 81 7d fc 03 00 00 00 cmpl $ 0x3, -0x4 (% rbp) 0x100000ec2: 0f 85 06 00 00 00 jne 0x100000ece 0x100000ec8: ff 25 12 ba de ff jmpq * -0x2145ee (% rip) 0x100000ece: 48 8d 3d bb 00 00 00 leaq 0xbb (% rip),% rdi – Div 19 January 2017 в 03:06
  • 4
    Я бросил несколько байт-кода, чтобы кто-то захотел посмотреть, как выглядел jmpq (так как сейчас я интересуюсь FF 25. Меня действительно интересует JMP / 5) – Div 19 January 2017 в 03:13
  • 5
    @RouteMapper: Не существует также косвенности? Я предполагаю, что адрес перехода - loaded от 0x600860 (?). – Konrad Eisele 4 June 2018 в 05:48

Это синтаксис AT & amp; T для непрямого доступа JMP с режимом относительной адресации RIP.

Адрес перехода выбирается из ячейки памяти, которая указана относительно указатель инструкции: сначала вычислите 0x4003be + 0x2004a2 == 0x600860, затем выберите адрес для перехода с места 0x600860.

Возможны другие режимы адресации, например, таблица перехода может использовать jmpq *(%rdi, %rax, 8) с базой таблицы в RDI и индексе в RAX.

RIP-относительная адресация для статических данных является обычным явлением. В этом случае он обращается к записи в GOT (Global Offset Table), настроенной динамической компоновкой.

0
ответ дан Peter Cordes 19 August 2018 в 03:16
поделиться