extern putchar, getchar, printf
global main
SECTION .data
fmt: db “characters = %d", 10,0
SECTION .bss
SECTION .text
global main
main:
xor eax, eax
xor ebx, ebx
start:
call getchar
cmp eax, -1
jle exit
inc ebx;
cmp eax, "A"
jl print
cmp eax, "z"
jg print
cmp eax, "Z"
jle rotup
cmp eax, "a"
jge rotlow
jmp print
rotup:
cmp eax, "M"
jle add13
sub eax, 13
jmp print
rotlow:
cmp eax, "m"
jle add13
sub eax, 13
jmp print
add13:
add eax,13
jmp print
print:
push eax;
call putchar
add esp,4
jmp start
exit:
push ebx
push fmt
call printf
add esp,8
ret
Ok. 그래서 난 내 클래스 중 하나에 대한 Vigenere 암호를 실행하기 위해이 프로그램을 사용하고 내가 NASM을 실행하려고 할 때 그것은 첫 번째 부분을 잘 작동어셈블리 언어에 nasm을 사용할 때 계속 우분투에서 x86을 사용합니다.
nasm -f elf cipher.asm
하지만 내가 시도
ld -o cipher cipher.o
그것을 계속하려면
ciper.o: In function 'start':
cipher.asm:(.text+0x5): undefined reference to 'getchar'
cipher.o: In function 'print':
cipher.asm:(.text+0x40): undefined reference to 'putchar'
cipher.o: IN function 'exit':
cipher.asm:(.text+0x50):undefined reference to 'printf'
나는 이것이 내가 내게주는 이유를 알지 못한다. 나는 그것이 외계인의 포인트라고 생각했다. 또한 당신이 궁금해하는 경우 인스턴트 메신저를 사용하여 64 비트에서 우분투를 실행. Ive는이 문제를 해결하는 방법에 대한 읽기를 시도했지만 나에게 도움이되는 것을 찾지 못하는 것 같습니다.
편집 : 지금은 링크 대신 LD의 GCC를 사용하려고하지만 난
gcc -o output cipher.o
또는 유사한 것을 사용하는 경우 그것은 나에게주는
/usr/bin/ld: i386 architecture of input file 'cipher.o' is incompatible with i386:x86-64
output
그 여전히 나에게 정의되지 않은 참조를 제공합니다 그리고 내가 코드에서 C 함수를 사용할 수 있도록 어떻게해야하는지 또는 링크하는 법을 모른다.
내가 _putchar하는 _getchar를 사용하여 시도, _printf하지만 여전히 나에게 같은 일을 이야기하지만, 단지를 포함 한 또한 오류 –
와 _ 내가 어떻게 'LD'명령 줄 –
에 C 라이브러리에 링크 것 리눅스 ELF 시스템은 유명한'_'을 사용하여 이름을 변경하지 않습니다. 아마도'-lc'가 빠진 것에 대해 당신은 맞을 것이다. –