나는 라인이 일부 NASM 파일이 :NASM 가스 : 호출 equ'd 문자
b_print_newline equ 0x0000000000100040
bmdev.asm
을 포함 파일 :
%INCLUDE "bmdev.asm"
bmdev.asm
파일은 다음과 같은 EQU 지시어를 가지고 그런 다음 해당 항목을 호출 할 수 있습니다. 나는.
call b_print_newline
GAS로 변환 할 수있는 방법이 있습니까? 내가 즉, 직접 번역을 할 때
.set b_print_newline , 0x100040
call b_print_string
옳은 일에 분해가 표시되지 않습니다
callq 0xfffffffffff00040
:
callq *0x100040
NASM 호출로 분해 여기서 목표는 NASM 대신 GAS를 통해 BareMetal OS에 대한 바이너리를 생성하는 것입니다.
작동 이진의 전체 분해 :
$ objdump -D -b binary -m i386:x86-64 test-nl.app
test-nl.app: file format binary
Disassembly of section .data:
0000000000000000 <.data>:
0: e8 3b 00 f0 ff callq 0xfffffffffff00040
5: c3 retq
작동하지 않는 바이너리의 전체 분해 :
$ objdump -D -b binary -m i386:x86-64 test-nl-a.app
test-nl-a.app: file format binary
Disassembly of section .data:
0000000000000000 <.data>:
0: ff 14 25 40 00 10 00 callq *0x100040
7: c3 retq
나는의 (희망) 깨끗한 버전을 게시 한 이 질문. 이걸 닫아라.
어셈블 할 바이트 (16 진수)를 표시 할 수 있다면 도움이 될 수 있습니다. – user786653
@ user786653 전체 디스 어셈블리 정보로 질문을 업데이트했습니다. – dharmatech
(b_print_string을 0x100040으로 변경 한 후) 잘 돌아가고 있습니다. 'call b_print_string'는 올바른 바이너리를 생성하지만,'call * b_print_string'은 잘못된 바이너리를 생성합니다. 어쩌면 코드에있는 것이 아니라 컴파일하는 동안의 당신의 주장에있을 것입니다. – ughoavgfhw