2016-07-11 1 views
2

나는 다음과 같은 어셈블리 코드가 있습니다왜이 어셈블리 언어 명령어에 대해 objdump가 null 연산 코드를 표시합니까?

global _start 
section .text 
_start: 

add byte [eax], al 

컴파일하고, 나는 오피 보려고 연결 후 : 내가 널 오피 코드를 이유는 무엇입니까

$ objdump -d eax.o 

eax.o:  file format elf32-i386 


Disassembly of section .text: 

00000000 <_start>: 
     ... 
$ 

를?

+1

그리고 무엇 널 오피 잘못 :

objdump -z -d eax.o 

출력은 같은 모양해야합니까? 그것은 유효합니다. –

+1

@michael 나는 그 질문을 대신 닫아야한다고 생각하지 않는 이상 답변으로 자격이 있다고 말하고 싶습니다. 그래도 나에게 합리적인 것 같아. –

+0

@CodyGray : 동의 할 수있는 복제본을 찾고 있었고 주석으로 답변을 입력하고있었습니다. 감사. –

답변

4

이 명령 :

add byte [eax], al 

는 두 바이트 ADD 지시 × 00 × 00로 인코딩됩니다 : 기본적으로

Opcode Instruction  Op/En 64-bit Mode Compat/Leg Mode Description 
00 /r  ADD r/m8, r8 MR  Valid  Valid   Add r8 to r/m8. 

objdump를...으로 반복 제로의 블록을 인쇄합니다. manual에 설명 된대로이 동작을 변경하려면 -z 옵션을 사용해보십시오 :

-z --disassemble-제로

일반적으로 분해 출력이 제로의 블록을 건너 뜁니다. 이 옵션은 디스어셈블러가 다른 데이터와 마찬가지로 블록을 분해하도록 지시합니다.

귀하의 명령은 다음과 같을 수 있습니다 :

Disassembly of section .text: 

00000000 <_start>: 
    0: 00 00     add %al,(%eax) 
+1

답변 해 주셔서 감사합니다 :)) –