В настоящее время я пытаюсь вызвать эту функцию под названием «super_secret_function», которая определяется за пределами main в файле main.c. Я использую ASM и не могу использовать jmp или call для достижения этой «super_secret_function». Внутри main - это функция, называемая stack_hack, которая является функцией, с которой я могу манипулировать, чтобы изменить адреса, чтобы достичь сверхсекретной функции.Как вызвать функцию в ASM без вызова или перехода?
Использование GDB Я смог определить адреса «super_secret_function» и успешно называть его jmping к нему из функции. Как я могу манипулировать возвращаемым значением указателя, чтобы вернуться к этому адресу?
.globl stack_hack
stack_hack:
pushq %rbp # push the base pointer on the stack
movq %rsp, %rbp # move the previous stack pointer to the new base poi
##MyCode
movq $0x00000000004005b4, %rbp
jmp *%rbp
##EndMyCode
movq %rbp, %rsp # move the stack pointer to the base pointer
popq %rbp # pop the base pointer and load it into %rbp
ret # pop the instruction pointer into %rip
Что такое «возвращает значение указателя»? – immibis
Как минимум, 'ret' берет значение из стека и использует его для изменения IP. Как вы можете изменить что-то в стеке, может ли это быть использовано, чтобы взять вас где-то где-то вместо _back from_? Подсказка: на самом деле это не так сложно, как вы думаете. :) – enhzflep
Большое вам спасибо. Я переместил пункт назначения в% rax, и после того, как он выскочил из rbp, я затем нажал% rax на стек и вернулся –