сборка x86 64 - PullRequest
       16

сборка x86 64

2 голосов
/ 15 ноября 2010

Я пишу самоизменяющийся код.

movq      $TARGET_CIA, 0x550(%rax)

Этот символ TARGET_CIA изначально не определен, и во время выполнения я пытаюсь скопировать непосредственное 64-битное значение в это местоположение. Но во время компиляции эта инструкция принимает значение этого неопределенного непосредственного значения как 32-битное, и когда я пытаюсь скопировать 64-битные, я вижу расширенные 32-битные со знаком на своем месте. Есть ли способ обработать этот неопределенный символ как 64-битное значение?

Ответы [ 2 ]

12 голосов
/ 24 апреля 2011

Вам нужно

movabs $0x1234567890abcdef, 0x550(%rax)

Инструкция movabs требуется для 64-битных немедленных операций.

0 голосов
/ 16 ноября 2010

Я бы просто запустил другую инструкцию, чтобы получить вторые 32 бита. Возможно, это не лучший способ, так как я некоторое время не делал ASM, однако это сработает. :)

Удачи Люк Петерсон

...