작은 컴파일러 프로젝트에서 작업하고 있는데 스택의 값 대신 스택 위치의 주소를 푸시하는 방법을 알아낼 수 없습니다 위치. 내 목표는 정수 값을 보유하는 스택 위치 주소를 인쇄하는 C 함수의 void 포인터로 푸시하는 것입니다. 내 궁극적 인 목표는 함수에서 포인터 정수 연산을하는 것입니다. 런타임 라이브러리 확장에서 C 함수를 호출하는데 성공했지만 문제는 어셈블리에서 주소를 푸시하는 방법을 찾는 것입니다.주소의 값 대신 스택 위치 주소를 밀어 넣으십시오.
My C 함수. 내가 주소로 값 42
을 주조하고있어 이후
void print(void* ptr){
int* int_ptr = (int*)ptr;
printf("*int_ptr is %d\n",*int_ptr);
}
내가 지금 무슨에 관해서는 내 조립
.globl main
main:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $42, %eax
movl %eax, -4(%ebp)
pushl -4(%ebp)
//Instead of the value at -4(%ebp), I would like the address of -4(%ebp)
call print
addl $8, %esp
leave
ret
, 그것은 충돌 것입니다. 좀 더 자세한 정보를 얻으려면 참고 자료 나 자료로 직접 안내해 줄 수 있습니까?
@MichaelPetch 와우! 나는 그게 그렇게 간단하지 않다고 믿을 수 없다. 정말 고맙습니다! – Miket25