Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Unable to find the global bin directory
- node
- 반응형 페이지 좌표 변환
- credential error
- AWS
- ogr2ogr
- netlify variables
- EC2
- can't getting credentials
- 설치완료안됨
- aws ec2
- Error:error:0308010C:digital envelope routines::unsupported
- 김골라
- react
- AWS CodeBuild
- rwdImageMaps
- C언어
- 어셈블리어
- Sequelize Error: Dialect needs to be explicitly supplied as of v4.0.0
- 이미지 맵
- AWS CodePipeline
- ERR_PNPM_NO_GLOBAL_BIN_DIR
- CSS
- GeoJSON object too complex/large
- S3
- NODE_VERSION
- expo
- 이미지 좌표 추출
- nodejs
- SASS
Archives
- Today
- Total
ImFe's study
어셈블리어로 Hello world 출력하고 디버깅해보기 본문
칼리리눅스 터미널창을 띄운 후
nano helloworld.s 를 입력해줍니다. s는 어셈블리 코드파일을 의미합니다.
입력한 후
section .data
msg db "hello word"
section .text
global_start
_start:
mov rax, 1 //mov를 통해 rax에 1값을 넣어줍니다. 1은 systemwrite를 call하게 해줍니다.
mov rdi, 1 //file discrupter에 1을 넣습니다. (=문자열을 출력하겠다)
mov rsi, msg //msg라는 포인터변수를 rsi에 넣음으로써 출력합니다
mov rdx, 12 //문자열 길이를 지정합니다.
syscall //syscall하면서 hello world가 출력됩니다.
mov rax, 60 //rax에60 값을 넣는건 system exit를 의미합니다.
mov rdi, 0 //에러코드? 를 의미하는 줄인거같습니다. 0이니까 해당사항이 없겠네요
syscall //종료
(손 필기라 오타가 있을수 있습니다. + rax(8비트)=eax(4비트)입니다
다 입력후 컨트롤+x를 입력후 y를 입력해줍니다.
(cat helloword.s를 통해 제대로 입력되었는지 확인할수있습니다.)
nasm -f elf64 -o helloword.o helloword.s
(목적코드로 먼저 변환)
ld -o helloword helloword.o
를 차례로 입력해줍시다
ls명령어를 이용하면 helloword 파일이 생성된것을 알 수 있습니다.
리눅스의 경우에는 초록색으로 표시된 파일이 실행할수있는 파일입니다.
rax에 값을 넣어주는 이유는? :
rax에 넣어주는 값에 따라 호출되는 함수가 달라지기 때문입니다.
이러한 행동을 시스템 호출이라하는데 시스템 호출은 크게 다섯가지의 주요 범주로 묶을 수 있습니다.
프로세스 제어, 파일 조작, 장치 관리, 정보 유지, 통신 이 있는데 값을 달리하여 다른 함수들을 불러옵니다.
참고: http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/
또한 첨부된 링크 속 표를 보면 rax값에는 매개변수가 따라온다는걸 알 수 있습니다.
'Reversing' 카테고리의 다른 글
스택, 함수에필로그, 프롤로그 (0) | 2020.05.19 |
---|---|
InstructionCycle, 레지스터, 함수호출규약, DataSize, FLAGS, Instruction Format (0) | 2020.05.14 |
리버스 엔지니어링이란 (0) | 2020.05.14 |
어셈블리 코드 해석 (0) | 2020.04.12 |
어셈블리어 (0) | 2020.04.12 |
Comments