Эта функция предназначена для получения начального адреса стека:
unsigned long find_start(void){ __asm__("movq %rsp, %eax"); }
Когда я компилирую это, получаю ошибку:
Error: suffix or operands invalid for `movq'
movq - это инструкция, которая ожидает 64-битные операнды.rsp - это 64-битный регистр, а eax - это 32-битный регистр.
movq
rsp
eax
Возможно, попробуйте rax?
rax
Как указано, вам нужно использовать 64-битный регистр% rax.
Что касается того факта, что указатель стека каждый раз отличается, я подозреваю, что вы видите результаты рандомизации макета адресного пространства , и в реальном времени при этом ...
%eax - это 32-битный регистр GP.Однако вы пытаетесь сделать 64-битный ход с ним.Это должно быть %rax.
%eax
%rax