완료됨
gcc -o orw orw.c -masm=intel에서 -masm이 무얼 의미하는 건가요?

-masm이란 변수에 intel을 저장한다는 건 알 것 같은데, 저 문구를 추가함으로써 무슨 효과가 있는 건지 잘 모르겠습니다.

#시스템_해킹 #공격기법
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 2
코리아
강의 수강: 1

어셈블리 문법이 AT&T와 Intel 두가지 방식이 있습니다.
intel 문법이 보기 좋기 때문에 사용하는것 같습니다.

AT&T문법 예
pushq %rbp
movq %rsp, %rbp
subq $32, %rsp
movl %ecx, 16(%rbp)
movq %rdx, 24(%rbp)
이런식이라면,
intel문법(-masm=intel 사용)
push rbp
mov rbp, rsp
sub rsp, 32
mov DWORD PTR 16[rbp], ecx
mov QWORD PTR 24[rbp], rdx
이런식이죠

2023.03.21. 15:31

C를 작성할 때, assembly code를 직접 넣을 경우가 생깁니다.
이때 X86 assembly의 원하는 형식(일반적으로 intel / AT&T 방식 중 하나)을 해석할 수 있도록 -masm [att/intel] 옵션을 추가합니다.
Example Code:

#include<stdio.h>

void gadget(){
    __asm__("mov eax, 1");
    __asm__("syscall");
}
..
gcc -o main main.c -masm=intel
#include<stdio.h>

void gadget(){
    __asm__("movl #1, %eax");
    __asm__("syscall");
}
..
gcc -o main main.c -masm=att (default 값은 att)

여기에 더해 gcc로 어셈블리어로 적힌 파일을 만들 때에도 intel 방식일 경우 명시해야 합니다.
자세한 내용은 intel 공식 docs를 참고하시면 됩니다.
https://www.intel.com/content/www/us/en/docs/cpp-compiler/developer-guide-reference/2021-8/masm.html

2023.03.21. 15:44