ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • assem 분석 2
    공부/리버싱 2014. 5. 12. 02:18

    http://www.hackerschool.org/HS_Boards/data/Lib_system/binary1.txt


    혼자 공부하는거라 틀릴수도 있습니다


    for문 ---------------------------------------------------- 0x8048460 <main>: push %ebp // 베이스 포인트 0x8048461 <main+1>: mov %esp,%ebp //현재 스택상태 복사 0x8048463 <main+3>: sub $0x8,%esp // 스택 확장 0x8048466 <main+6>: nop //아무것도 안함 0x8048467 <main+7>: movl $0x1,0xfffffffc(%ebp) // ebp에 1 (여기서는 변수 i) 0x804846e <main+14>: mov %esi,%esi 0x8048470 <main+16>: cmpl $0x9,0xfffffffc(%ebp) //9와 i를 비교 0x8048474 <main+20>: jle 0x8048478 <main+24> // 9가 i보다 작거나 같다면 0x8048476 <main+22>: jmp 0x8048494 <main+52> //0x8048494로 점프 0x8048478 <main+24>: sub $0x8,%esp    //스택확장 0x804847b <main+27>: pushl 0xfffffffc(%ebp) //i의 주소를 스택에 push 0x804847e <main+30>: push $0x8048508 // %d\t의 주소를 push 0x8048483 <main+35>: call 0x804833c <printf> //프린트 호출 0x8048488 <main+40>: add $0x10,%esp //스택정리 0x804848b <main+43>: lea 0xfffffffc(%ebp),%eax // eax값은 i 0x804848e <main+46>: incl (%eax) //eax ++ 0x8048490 <main+48>: jmp 0x8048470 <main+16> //main+16으로 점프 0x8048492 <main+50>: mov %esi,%esi 0x8048494 <main+52>: leave 0x8048495 <main+53>: ret //프로그램 종료 0x8048496 <main+54>: mov %esi,%esi 0x8048508 <_IO_stdin_used+4>: "%d\t" main() { int i; for(i = 1; i < 10; i++) printf("%d\t",i); } ---------------------------------------------------- 0x8048460 <main>: push %ebp 0x8048461 <main+1>: mov %esp,%ebp 0x8048463 <main+3>: sub $0x8,%esp //스택확장 0x8048466 <main+6>: movl $0x1,0xfffffffc(%ebp)

    //1을 0xfffffffc에 집어 넣음    int i=1; 0x804846d <main+13>: movl $0xa,0xfffffff8(%ebp) //10을 0xfffffff8에 집어 넣음 int j = 10;

    0x8048474 <main+20>: mov 0xfffffffc(%ebp),%eax

    0xfffffffc를 eax에 이동    

    0x8048477 <main+23>: cmp 0xfffffff8(%ebp),%eax

    j와 i를 비교

    0x804847a <main+26>: jle 0x8048480 <main+32> 0x804847c <main+28>: jmp 0x804849c <main+60>

    j가 i보다 작거나 같으면 점프


    0x804847e <main+30>: mov %esi,%esi 0x8048480 <main+32>: sub $0x8,%esp    //스택확장 0x8048483 <main+35>: lea 0xfffffffc(%ebp),%eax

    eax 주소값을 0xffffffffc에 복사 0x8048486 <main+38>: push %eax //스택에 넣기 0x8048487 <main+39>: push $0x8048508 //스택에 넣기 0x804848c <main+44>: call 0x804833c <printf> //프린트 0x8048491 <main+49>: add $0x10,%esp //스택정리 0x8048494 <main+52>: lea 0xfffffffc(%ebp),%eax 0xffffffc의 주소를 eax에 복사 0x8048497 <main+55>: incl (%eax) eax++; 0x8048499 <main+57>: jmp 0x8048474 <main+20> //main+20으로 점프

    0x804849b <main+59>: nop 0x804849c <main+60>: leave 0x804849d <main+61>: ret 0x804849e <main+62>: mov %esi,%esi main() { int i,j; i = 1; j = 10; for( ; i <= j ; i++) printf("%d\n",&i); } ---------------------------------------------------- 0x8048460 <main>: push %ebp 0x8048461 <main+1>: mov %esp,%ebp 0x8048463 <main+3>: sub $0x8,%esp //스택확장 0x8048466 <main+6>: nop 0x8048467 <main+7>: movl $0xa,0xfffffffc(%ebp) // 0x804846e <main+14>: mov %esi,%esi 0x8048470 <main+16>: cmpl $0x0,0xfffffffc(%ebp) 0x8048474 <main+20>: jg 0x8048478 <main+24> 0x8048476 <main+22>: jmp 0x8048494 <main+52> 0x8048478 <main+24>: sub $0x8,%esp 0x804847b <main+27>: pushl 0xfffffffc(%ebp) 0x804847e <main+30>: push $0x8048508 0x8048483 <main+35>: call 0x804833c <printf> 0x8048488 <main+40>: add $0x10,%esp 0x804848b <main+43>: lea 0xfffffffc(%ebp),%eax 0x804848e <main+46>: decl (%eax) 0x8048490 <main+48>: jmp 0x8048470 <main+16> 0x8048492 <main+50>: mov %esi,%esi 0x8048494 <main+52>: leave 0x8048495 <main+53>: ret 0x8048496 <main+54>: mov %esi,%esi main() { int i; for(i = 10; i > 0 ; i--) printf("%d\n",i); } ------------------------------------------------------------- 0x8048460 <main>: push %ebp 0x8048461 <main+1>: mov %esp,%ebp 0x8048463 <main+3>: sub $0x8,%esp 0x8048466 <main+6>: nop 0x8048467 <main+7>: movl $0xa,0xfffffffc(%ebp) 0x804846e <main+14>: mov %esi,%esi 0x8048470 <main+16>: cmpl $0x0,0xfffffffc(%ebp) 0x8048474 <main+20>: jns 0x8048478 <main+24> 0x8048476 <main+22>: jmp 0x8048494 <main+52> 0x8048478 <main+24>: sub $0x8,%esp 0x804847b <main+27>: pushl 0xfffffffc(%ebp) 0x804847e <main+30>: push $0x8048508 0x8048483 <main+35>: call 0x804833c <printf> 0x8048488 <main+40>: add $0x10,%esp 0x804848b <main+43>: lea 0xfffffffc(%ebp),%eax 0x804848e <main+46>: decl (%eax) 0x8048490 <main+48>: jmp 0x8048470 <main+16> 0x8048492 <main+50>: mov %esi,%esi 0x8048494 <main+52>: leave 0x8048495 <main+53>: ret 0x8048496 <main+54>: mov %esi,%esi main() { int i; for(i = 10; i >= 0 ; i--) printf("%d\n",i); } ==================================================================== 단일for문&비교문 정리 +------------------------------------------------------------------+ | nop | | int i = n; movl $0xn, 0xfffffffc(%ebp) | | mov %esi, %esi | | for(i = n ; i < k ; i++) cmpl $0xk-1,0xfffffffc(%ebp) | | jle 0x0804....(for문 안으로) | | jmp 0x0804....(for문 밖으로) | | for문안에 있는 내용 | | lea 0xfffffffc(%ebp),%eax | | lncl (%eax) | | jmp 0x0804....(for문 처음으로) | | mov %esi, %esi | +------------------------------------------------------------------+ | nop | | int i=1, movl $0x1,0xfffffffc(%ebp) | | j=10; movl $0xa,0xfffffff8(%ebp) | | mov 0xfffffffc(%ebp),%eax | | for(i = 1 ; i <= 10 ; i++) cmpl 0xfffffff8(%ebp),%eax | | jle 0x0804....(for문 안으로) | | jmp 0x0804....(for문 밖으로) | | for문안에 있는 내용 | | lea 0xfffffffc(%ebp),%eax | | lncl (%eax) | | jmp 0x0804....(for문 처음으로) | | mov %esi, %esi | +------------------------------------------------------------------+ | nop | | int i = k; movl $0xk, 0xfffffffc(%ebp) | | mov %esi, %esi | | for(i = k ; i > n ; i--) cmpl $0xn, 0xfffffffc(%ebp) | | jg 0x0804....(for문 안으로) | | jmp 0x0804....(for문 밖으로) | | for문안에 있는 내용 | | lea 0xfffffffc(%ebp), %eax | | decl (%eax) | | jmp 0x0804....(for문 처음으로) | | mov %esi, %esi | +------------------------------------------------------------------+ | nop | | int i = 10; movl $0xa,0xfffffffc(%ebp) | | mov %esi, %esi | | for(i = k ; i >= n ; i--) cmpl $0xn, 0xfffffffc(%ebp) | | jns 0x0804....(for문 안으로) | | jmp 0x0804....(for문 밖으로) | | for문안에 있는 내용 | | lea 0xfffffffc(%ebp), %eax | | decl (%eax) | | jmp 0x0804....(for문 처음으로) | | mov %esi, %esi | +------------------------------------------------------------------+ ===================================================================== -------------------------------------------------------------


    '공부 > 리버싱' 카테고리의 다른 글

    x64 stack frame  (0) 2014.08.12
    reversing.kr replace  (0) 2014.08.11
    assem 분석 2  (0) 2014.05.12
    리버싱문제 패스워드 숨기기  (0) 2014.05.06
    assem 분석 1  (1) 2014.05.05
    upx 언패킹 성공  (0) 2013.09.12

    댓글 0

Designed by Tistory.