Что не так с этим утверждением на x86-64? - PullRequest
3 голосов
/ 17 апреля 2011

Эта функция предназначена для получения начального адреса стека:

unsigned long find_start(void){
        __asm__("movq %rsp, %eax");
}

Когда я компилирую это, получаю ошибку:

Error: suffix or operands invalid for `movq'

Ответы [ 3 ]

4 голосов
/ 17 апреля 2011

movq - это инструкция, которая ожидает 64-битные операнды.rsp - это 64-битный регистр, а eax - это 32-битный регистр.

Возможно, попробуйте rax?

1 голос
/ 17 апреля 2011

Как указано, вам нужно использовать 64-битный регистр% rax.

Что касается того факта, что указатель стека каждый раз отличается, я подозреваю, что вы видите результаты рандомизации макета адресного пространства , и в реальном времени при этом ...

1 голос
/ 17 апреля 2011

%eax - это 32-битный регистр GP.Однако вы пытаетесь сделать 64-битный ход с ним.Это должно быть %rax.

...