2013-05-22 7 views
0

Каким будет gcc-компилируемый код GAS ASM для хранения моей постоянной $ 3360220 в ячейке памяти 0x7FFFFFFFb098? Получит ли это желаемый результат? Это нормально, что инструкция movabs «разливается» на следующей строке? добавлен вопрос: мой разобранном код выглядит следующим образом Eventhough я написалСохранение константы в памяти с использованием ASM

jmp 0x401070 

, почему такое и как это исправить это? он также конвертируются мой MOVQ в movabs

0: 49 c7 c1 dc 45 33 00 mov $0x3345dc,%r9 
    7: 49 ba 98 f0 ff ff ff movabs $0x7fffffff098,%r10 
    e: 07 00 00 
    11: 4d 89 0a    mov %r9,(%r10) 
    14: e9 00 00 00 00   jmpq 0x19 

Я сделал файл .d в Linux x86-64 с помощью objdump -d file.o > file.d. Как использовать правильную ссылку?

Я ошибся адресом, поначалу пропуская «b» в шестнадцатеричном формате.

ответ

0

я решил мою проблему толкая адрес в стеке и возвращение.

0000000000000000 <.text>: 
    0: 49 c7 c1 dc 45 33 00 mov $0x3345dc,%r9 
    7: 4c 8d 54 24 08   lea 0x8(%rsp),%r10 
    c: 4d 89 0a    mov %r9,(%r10) 
    f: ff 34 25 70 10 40 00 pushq 0x401070 
    16: c3      retq 

Проблема заключалась в том, что один не может легко указать адрес 64-битную в инструкции JMP. Ассемблер не знает, где находится этот код, он откладывает 32-битные значения для близкого перехода и добавляет раздел перемещения, который сообщает компоновщику обновить эту область с правильными данными.

0

Для сохранения постоянной $ 3360220 в месте 0x7FFFFFFF098 памяти, вы хотите что-то вроде:

mov $3360220, %rax 
movabs %rax, 0x7fffffff098 

Вы

jmp 0x401070 

выглядит следующим образом:

14: e9 00 00 00 00   jmpq 0x19 

потому чтовы разобрали файл .o. Если разобрать его после того, как компоновщик делаются с обработкой перемещения, это будет выглядеть нормального:

0x00000000004000e5 <+17>: e9 86 0f 00 00 jmpq 0x401070 
+0

ошибка, несоответствие размера операнда для movabs говорит мой gcc. Благодарим вас за информацию о недостающем компоновщике. Таким образом, мой код не будет работать должным образом без сборочной компоновки компоновщика, я думаю. –