SystemHacking/Assembly(15)
-
[15] gdb 디스어셈블러 사용법,예제 ( C와 어셈블리 )
gdb 명령어 관련 http://itsaessak.tistory.com/78 #include char *passwoprd = "th3p4ssw0rd"; int main(){ // 1036byte char buffer[1024]; // ebp- 1024 char *p; // ebp-1028 char *q; // ebp-1032 int length; // ebp-1036 printf("Input password: "); // char *fgets( char *s, int size, FILE *stream); fgets(buffer,1024,stdin); if ( length > 0 && buffer[length-1] == '\n' ){ buffer[length-1] = 0 ; } while ( *p != 0..
2017.11.03 -
[13] 어셈블리 cat구현 ( SystemCall )
[ System Call 형식 ] [ C Progrmming ]1234567891011121314151617int main(){ char file[1024]; write( 1,"FILE: ", 6 ); len = read ( 0, file , 1024 ); file[len-1] = 0 ; ret = open ( file, O_RDONLY ); // ReadOnly
2017.11.01 -
[12] 어셈블리 mkdir 구현 ( SystemCall )
[ System Call 형식 ] 표를 참고해서 레지스터에 어떤 값을 넣어야 할지 확인하자 [ mkdir C언어 표현 ]1234567891011121314151617181920212223242526272829303132int main(){ char path[1024]; int len=0; write( 1, "path: " , 6 ) // write( fd , 문자 , 출력할 길이 ) , fd=1 : 표준출력 len = read( 0, path, 1024 ) ; // read( fd, 저장할 변수, 입력받을 길이 ) , fd=0 : 표준 입력 path[len-1] = 0 // 사용자로부터 문자열을 입력받는다, 마지막의 뉴라인을 제거해야한다 ret = mkdir( path, 0755 ) // mkdir ( ..
2017.10.31 -
[11] 어셈블리 argc, argv 이해하기
1. main함수의 인자 포인터 배열 : 주소를 원소로 하는 배열배열 포인터 : 배열을 가리키는 포인터 [ 사용법 ] int main( int argc, char *argv[] ){printf("%s \n", argv[1] ); // argv[1] 은 주소이다 !return 0; // 실행파일의 첫번째 인자의 주소 !} // argv[0] 은 실행파일의 이름임=>실행결과 #./a.out hello hello *argv[] : 포인터 배열 ( 인자들이 주소 ) ebp+8 : argc : 인자의 개수, 즉 *argv[]배열의 인자 개수ebp+12 : argv[] : 실행파일의 이름이 들어있다ebp+16 : argv[1] : 실행파일의 첫번째 인자의 주소값(포인터)이 들어있다ebp+20 : argv[2] : ..
2017.10.30 -
[10] 어셈블리 스택메모리를 이용한 변수 저장 및 사용
http://itsaessak.tistory.com/249 는 스택메모리를 사용하지 않고 bss section을 이용했습니다다. 더 쉬운 버전이니 참고하길 바랍니다 [ 어셈블리 코드 ] - 문자를 입력하면, 거꾸로 출력되어 진다 extern scanf extern printf section .data prompt_str db '%s',00 print_chr db '%c',00 print_new db 10,00 section .text global main main: push ebp mov ebp, esp ; function epilogue sub esp, 1028 ; 지역변수 공간 할당 1028 byte lea eax, [ebp-1024] ; eax에는 ebp-1024 주소값이 입력 push eax pu..
2017.10.27 -
[9] 어셈블리 스택 메모리를 이용한 간단한 덧셈 ( leave, ret, call )
C언어 코드를 어셈블리코드로 표현하자 [ C언어 코드 ] int sum( int a, int b ){ int sum = 0 ; sum = a + b ; return sum ; } int main(){ int a = 10; int b = 20; int ret = 0; ret = sum(a,b); printf("Sum : %d\n",ret ); return 0 ; } [ 어셈블리 코드 ] extern printf section .dataprompt_hex: db '0x%08x',10,00prompt_int: db '%d',10,00prompt_sum: db 'Sum is : %d',10,00section .textglobal mainsum:push ebpmov ebp, esp ; function prolog..
2017.10.27