$bash

System - Assembly Handray

0x0300 : Study/0x0301 : System

Assembly Handray?

어셈블리 헨드레이란 어셈블리어를 c 언어로 복원시키는 것을 의미.


Assembly Instruction.

기본적인 어셈블리 명령어를 ArABoJa.


push : 스택에 특정 값을 넣고 ESP -4


pop : 특정 값에 ESP가 가리키는 값을 넣고 ESP + 4

 

nop : 아무것도 하지 않는다.


mov a, b : b를 A에 복사한다. ( a=b )


lea a, [b] : b의 주소에 있는 값을 a에 복사. ( a=*b )


cmp a, b : a와 b를 비교한다.


a > b    ZF = 0    CF = 1

a < b    ZF = 0    CF = 0

a == b  ZF = 1     CF = 0


add a, b : a와 b를 더해서 a에 결과를 넣는다. ( a+= b )


sub a, b : a와 b를 빼서 a에 결과를 넣음. ( a -= b )


imul a, b : a와 b를 곱해서 a에 넣음. ( a *= b )


xor a, b : a와 b를 xor 연산을 하여 a에 넣는다. ( a xor b )


inc a : a에 1 더함 ( a += 1 )


dec a : a에 1 뺌 ( a -= 1 )


je : 비교 값이 같은 경우 ( ZF = 1 )일때 점프한다.


jne : 비교 값이 다를 경우 ( ZF = 0 )일때 점프.


call : 해당 프로시저를 호출 (리턴값이 스택에 저장)


jmp : 해당 주소로 점프


// nop 명령어는 나중에 nop sled 기법으로 공부하면서 다시 언급 하자.


Handray!


// 시작하기전에 http://shayete.tistory.com/ 이사람 에서 공부한다. 그니깐 내가 끄적이는 것보다 저기를 추천함.

// 나는 저사람 블로그를 보고 공부한 내용을 서술하는 것 이다.. 문제되면 보호해서 암호화 할 계획.


ebp + 8 이상의 값이면 함수의 인자를 나타냄.

// int add (ebp + 8 , ebp + c , ebp + 10 )

// 3개의 함수의 인자가 나타남..


ebp - 4 , esp + 8 이상의 값은 지역변수이다.

숫자가 높을수록 가장 먼저 선언된 변수 !


mov x, y는 간단하게 x=y 이며 이게 lea x, [y] 와 같은 소리다.


인자 앞에 BYTE, WORD , DWORD 가 붙은 건 각각 1, 2, 4byte 임을 의미한다.


함수 프롤로그 밑에 sub x 가 있다는 것은 x 만큼 지역 변수가 선언해 있다는 것을 의미한다.


call x는 x라는 함수를 부른다는 뜻 인데 call 위에 보면 esp , esp + 4 , esp + 8 이 보인다. 이것은 각각 함수의 첫번째 인자 , 두번째 인자, 세번째 인자를 뜻한다.


for를 예시로 들어보자.

1    mov ebp - 0x8 , 0x0

2    cmp ebp - 0x8 , 0x9

3    add ebp - 0x8 , 0x1

2번줄 까지에 내용은 인자를 초기화 시키고 인자를 비교하는 것을 의미한다. 쭉 명령어를 실행시키고 3번째 부분에선 연산을 수행한다.

즉 ebp값이 0부터 8보다 같거나 9보다 클때 까지 1을 더한다는 의미가 된다...(맞나?)아몰랑 ^ㅡ^


// 이후 예시는 따로 참고 안함.

// 문제풀때 바로 걍 써먹었다.




" 출처 : http://shayete.tistory.com/ "

'0x0300 : Study > 0x0301 : System' 카테고리의 다른 글

생각난김에 쓴 심볼릭 링크  (0) 2016.07.19
System - Return To Library  (0) 2016.06.30
System - stack? gdb?  (0) 2016.06.12
System - 시스템해킹이란?  (0) 2016.06.12
Egg Shell  (0) 2016.06.07