저는 64 비트 우분투 운영 시스템을 가지고 있으며 32 비트 어셈블리를 배우고 있습니다.리눅스에서 C와 어셈블리 (32 비트 코드)를 결합하십시오. 64 비트
square.s : 나는이 두 파일을 컴파일하려고
#square.s
.section .text
.globl sqr
.type sqr, @function
sqr:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
imull %eax, %eax
popl %ebp
ret
main.c를 내 32 비트 가상 머신에
//main.c
#include <stdio.h>
extern long sqr(long);
int main(int argc, char* argv[])
{
long squared = sqr(10);
printf("%lu\n", squared);
return 0;
}
나는이 명령
gcc main.c square.s -o test
로 컴파일
그리고 효과가있었습니다. 내가 가지고있는 문제는 필자의 64 비트 머신에서이 파일들을 컴파일하고 싶다는 것이다. 나는이 파일을 컴파일하는 몇 가지 방법을 시도했지만 아무도 작동하지 못했다. 누구나 올바른 방향으로 나를 가리킬 수 있습니까? 이 작업을 수행 할 수있는 옵션이 있습니까? 나는 시도했다 -m32 그러나 그것은 작동하지 않았다. 나는이 수행 할 때
:
In file included from /usr/include/stdio.h:28:0,
from main.c:1:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.
우분투 GCC-multilib 필요 64 비트에
'gcc -m32 -o test main.c square.s'가 작동합니다. 어떻게 작동하지 않습니까? – AusCBloke
잘 모르겠습니다 ... 다시 확인하겠습니다. –
OT하지만 푸시 앤 팝이 불필요하다고 생각합니다. –