일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- vtable
- ncurses
- architecture
- mvwin
- LOB
- Compiler
- wrefresh
- epoll
- NAPT
- REDIS
- packet filter
- level trigger
- cbpf
- 어셈블리어
- .net core 7
- 풀이
- BOF
- edge trigger
- packet flow
- epoll_wait
- C언어
- Docker
- rfc5508
- ioctl
- wnourefresh
- 취약점
- DOCKER-USER
- iptables
- .nret core 배포
- doupdate
- Today
- Total
목록Assembly (24)
Tuuna Computer Science
extern printfextern scanf %include "asm_io.inc" segment .data msg db "input your number : ", 0 format_scanf db "%d", 0 segment .bss input resd 1 segment .text global asm_main asm_main: enter 0,0 pusha push msg call printf add esp, 4 push input push format_scanf call scanf add esp, 4 push dword [input] call bin add esp, 4 popa leave ret ;십진수를 바이너리로 보여줌 segment .data bin_array times 100 dd 0 bin_p..
extern printfextern scanf %include "asm_io.inc" segment .data format_msg db "%d %d lcm is %d",10, 0 msg db "input your two number : ", 0 format_input db "%d %d", 0 segment .bss input1 resd 1 input2 resd 1 segment .text global asm_main asm_main: enter 0,0 pusha push msg call printf add esp, 4 push input2 push input1 push format_input call scanf add esp, 12 mov eax, 0 ; return input 0 push dword [..
물론 형편없는 코드지만 공부용으로 작성 ~ 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162%include "asm_io.inc" extern printf segment .data format db "%d x %d = %d", 0 hello db "Hello this is a group of game", 0 segment .bss input resd 0; 합을 저장할 변수 segment.text global asm_main asm_main : enter 4, 0 pusha push hello call printf add esp, 4 call prin..
파일 다루기 유닉스 파일 :: 프로그램에 의해 생성되며 바이트의 연속된 스트림으로 읽을 수 있다. 파일에 주어진 고유한 이름(번호)으로 파일에 접근할 수 있다 -> 파일 디스크립터 open의 시스템 콜 :: 5번 open은 파일의 이름, 모드, 권한등을 인자로 받는다. 파일의 이름은 %ebx에 저장하고 모드는 %ecx에 저장한다. 읽기로 연다면 0을 쓰기위해서 03101을 저장하면 된다. (반드시 가장 앞에 0을 붙여야 함) 권한은 %edx에 저장 ex) 0666 모든 유저 읽기 쓰기 가능 리턴값은 %eax에 저장된다. :: 파일의 번호 리턴 read의 시스템 콜 3번 :: 리턴 값 읽어들인 바이트 수 파일 지정자 :: %ebx에 저장 읽어들인 데이터가 저장될 버퍼의 주소 :: %ecx에 주소값을 저장 ..
재귀함수를 호출하면 스택에 함수프레이임 쌓인다. 용어 풀이 from 00401527 to 004013E2 :: 00401527를 호출하고 004013E2로 반환하라 즉, 밑에서 부터 위로 읽으면 함수를 호출할 때마다 스택프레임에 쌓이고 있다는 것을 확인할 수 있다. 무리한 재귀함수 호출은 ㄴㄴ합니다. ex) 밑에서 부터 해석하면 00401500함수를 호출하고 00401521주소로 반환한다. 그리고 또 다시 00401500주소를 호출하고 00401521주소로 반환한다.
@pointer_00401500: ;
@pointer_00401500: ;
@pointer1_00401500: ;
LEA EBX, [EBP-4] : 스택기준으로 EBP-4의 주소값을 계산해서 EBX에 넣어라 이를 MOV 명령어로 나타내면 MOV EAX, EBP : EBP의 주소값을 계산해서 EAX에 넣어라 SUB EAX, 4 : 그 주소에서 4를 빼라 => [EBP-4] 이다. 그 이유는 MOV 명령어의 피연산자부분은 반드시 상수여야 하기 때문이다. 주의! MOV EAX, [EBP-4]는 단지 EBP-4의 주소에 들어있는 값을 넣는 것이다. 위들의 주소값을 얻었을 때 그 값을 사용하는 방법은 MOV EAX, [EBX] 이다. [REG, MEMORY] = 그 메모리와 레지스터 주소값에 들어있는 값을 참조
어셈블리어에서 TEST연산은 오퍼랜드 끼리 AND연산하여 결과값을 CMP연산과 같이 저장하진 않는다. 단지 플래그 값을 세팅하여 분기문에게 영향을 준다 ex) JE, JZ.... 같은 분기문 여기서 중요한것은 TEST EAX, EAX와 같은 명령어다. 얼핏보면 같은 레지스터끼리 AND연산하면 EAX값이 나올텐데 왜 하는걸까라는 생각을 할 수 있다. 하지만 바로 위에 쓰인 TEST명령어는 단지 EAX의 값이 0이냐 아니냐를 판단하기 위해서다 만약 EAX의 값이 0이라면 AND연산결과 당연히 0이 나올것이고, Z플래그 (ZF가 세팅될 것이다.) 밑에 JE 0040100 점프문이 있다면 ZF가 세팅되므로 0040100주소로 점프할 것이다.