는 :x86 ASM : DD "명령어"로 사용 하시겠습니까? 다음의 x86 어셈블리 코드에서
dd 0x1BADB002
dd 0x00
dd - (0x1BADB002+0x00)
값은 변수에 할당하지 않는 것. 그렇다면이 코드 스 니펫은 무엇을합니까? 메모리에 저장되는 것에 대해 들었지만 정확히 어디에서?
는 :x86 ASM : DD "명령어"로 사용 하시겠습니까? 다음의 x86 어셈블리 코드에서
dd 0x1BADB002
dd 0x00
dd - (0x1BADB002+0x00)
값은 변수에 할당하지 않는 것. 그렇다면이 코드 스 니펫은 무엇을합니까? 메모리에 저장되는 것에 대해 들었지만 정확히 어디에서?
dd
은 add eax,eax
이 출력에을 어셈블하는 것과 같은 방식으로 출력에 4 바이트 상수를 어셈블하는 "의사 명령어"입니다.
NASM 설명서 section 3.2 Pseudo-Instructions은 db
/dw
/dd
등으로 표시됩니다.
@MichaelPetch가 지적한 것처럼, 이러한 특정 상수는 멀티 부팅 헤더를 출력 파일로 어셈블하는 데 사용됩니다.
How does this assembly bootloader code work?
관련 https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format는 :
How are dw and dd different from db directives for strings?
What is the use of .byte assembler directive in gnu assembly?
이것은 mulitboot 헤더입니다. GRUB과 같은 것을 통해 실행될 코드를 작성하는 경우이 코드는 mulitboot와 호환되도록 코드를 식별하기 위해 GRUB (또는 mulitboot 호환 로더)에 대해 나타나는 ELF 파일의 처음 8k에 있어야합니다. 그것 없이는 멀티 부팅 로더가 오류를 일으 킵니다. GRUB 설명서에서 이에 대한 설명서를 찾을 수 있습니다. https : //www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format –
DD가 지침으로 사용되지 않습니다. 이것은 32 비트 값을 정의 할 수있게 해주는 NASM 지시문입니다. 이 데이터는 일반적으로 링커 스크립트가 생성 된 ELF 실행 파일의 다른 부분보다 먼저 배치하는 데이터 섹션에 있습니다 (이 파일은 파일의 처음 8k 번째 헤더를 가져 와서 멀티 부트 로더/GRUB에서 찾을 수 있습니다).) –