gcc로 실행 파일을 만들려고합니다. 두 개의 파일 virtualstack.c (아래 C 코드로 구성)와 stack32는 AT & T 문법 (C 코드 아래 참조)으로 작성된 Intel x86 어셈블리 코드로 구성됩니다. 내 명령 줄 명령은 gcc -c virtualstack.c -s stack.s
이지만 두 줄의 오류가 발생합니다 (스택 3의 3 행) - missing symbol name in directive
및 no such instruction _stack_create
. 어셈블리의 접두어가 밑줄 (_
) 인 C에서 함수를 올바르게 선언했다고 생각했습니다. 나는 어떤 의견이라도 매우 감사 할 것이다.gcc 컴파일 및 어셈블
C 코드 :
#include <stdio.h>
#include <stdlib.h>
extern void stack_create(void);
int main(void)
{
stack_create();
return 0;
}
어셈블리 코드 : 나는 어떻게 이러한 경우를 조사하는 방법을 설명하려고합니다
.global _stack_create
.type, @function
_stack_create
pushl %ebp
movl $5, %esp
movl %esp, ebp
movl $21, %edx
pushl %edx
두 번째'_stack_create' 다음에 콜론이 필요합니다. '.type '이있는 줄이 맞는지는 모르지만 필요하지는 않습니다. Btw, 5를 esp로 옮기면 문제가 생깁니다. –
@alexey frunze. 고마워 :) 이제 나는 결장에 대해 어리 석다. 나는 그걸 보았어 야했다. .type이 없으면 컴파일됩니다. 나는 아직도 그것이 실행 가능한지 볼 필요가있다. 또한 esp 경고에 감사드립니다. – stian
잘. .type, @function을 제거했습니다. 나는 gcc가 개별 objectfile을 생성한다는 것을 발견했다. 대신 gcc -o와 virtualstack.c -s stack.s를 쓰려고했습니다. 나는 그것이 대결 파일 (실행 파일)을 만들어야한다고 믿었다. 그럼 내가 main()에서 stack_create에 대한 정의되지 않은 참조를 얻을 - 어떤 아이디어가있어? – stian