2017-02-02 1 views
0

최근에 해킹에 대한 책과 기사를 읽으려는 시도가있었습니다. 그걸 알아 냈습니다. 해킹 : 착취 기술은입니다. 표준 Linux 도구로 작업하고 코드를 분석하는 방법에 대한 기본 자습서를 따르고 있습니다 (프로그래밍 챕터). 나는 프로그래밍의 초보자가 아니지만 리눅스 터미널로 일하는 것은 나를 위해 아주 새로운 것이다. 나는 Kali Linux의 최신 버전을 사용 중이다.(GDB) 중단 점 및 디스 어셈블

지금 아래의 간단한 프로그램을 사용하여 스택 세그먼트 작동 방식을 분석해야합니다.

int main(){ 
    void stack_func(int a,int b, int c, int d){ 
    char first; 
    int second; 

    first = 'c'; 
    second = 220; 
    } 

    stack_func(1,2,3,4); 
    return 0; 
} 

첫 번째 문제는 내부 기능에 대한 어떤 중단 점를 추가 할 수 있습니다. stack_func() 같은 함수 나 strcpy 등의 라이브러리 함수는 없습니다. 책에 따르면 보류중인 중단 점이 해결됩니다. 내 것은 그냥 무시되고 프로그램이 끝납니다.

[email protected]:~/Folder# gdb -q ./stack 
Reading symbols from ./stack...done. 
(gdb) b stack_func 
Function "stack_func" not defined. 
Make breakpoint pending on future shared library load? (y or [n]) y 
Breakpoint 1 (stack_func) pending. 
(gdb) run 
Starting program: /root/Folder/stack 
[Inferior 1 (process 20421) exited normally] 
(gdb) 

두 번째 문제는분해는 제 기능을 작동하지 않는다는 것입니다. 다시 책에 따르면 내 함수에 대한 어셈블러 코드를 볼 수 있어야합니다. stack_func()하지만 그 결과는 아래와 같습니다.

(gdb) disass stack_func() 
No symbol "stack_func" in current context. 
(gdb) 

텍스트의 문법 오류는 인정합니다. :)

+0

귀하의 노 부작용 기능이 아마도 컴파일러에 의해 제거, 또는 적어도 인라인했다. –

+0

'main' 밖에서'stack_func'을 움직이려 했습니까? –

+0

예 지금 오류 메시지가 표시됩니다. '디버깅 할 프로세스가 없다면 그렇게 할 수 없다. ' – Jacobe

답변

1

문제는 stack_func을 다른 함수에 정의한 것입니다. 이것은 nested function이고 GNU C에서는 gcc 확장입니다.이 함수는 예상 한 것보다 약간 다른 심볼 이름을가집니다. 그것의 정확한 심볼 이름을 찾으려면 당신은 nm 도구를 사용할 수 있습니다

[ tmp]$ nm a.out |grep stack_func 
00000000004004a6 t stack_func.1761 

그리고 브레이크 포인트 설정 및 GDB에서 분해 :

[ tmp]$ gdb -q ./a.out 
Reading symbols from ./a.out...done. 
(gdb) b 'stack_func.1761' 
Breakpoint 1 at 0x4004ba: file 111.c, line 6. 
(gdb) disassemble 'stack_func.1761' 
Dump of assembler code for function stack_func: 
    0x00000000004004a6 <+0>: push %rbp 
    0x00000000004004a7 <+1>: mov %rsp,%rbp 
    0x00000000004004aa <+4>: mov %edi,-0x14(%rbp) 
    0x00000000004004ad <+7>: mov %esi,-0x18(%rbp) 
    0x00000000004004b0 <+10>: mov %edx,-0x1c(%rbp) 
    0x00000000004004b3 <+13>: mov %ecx,-0x20(%rbp) 
    0x00000000004004b6 <+16>: mov %r10,-0x28(%rbp) 
    0x00000000004004ba <+20>: movb $0x63,-0x1(%rbp) 
    0x00000000004004be <+24>: movl $0xdc,-0x8(%rbp) 
    0x00000000004004c5 <+31>: nop 
    0x00000000004004c6 <+32>: pop %rbp 
    0x00000000004004c7 <+33>: retq 
End of assembler dump. 
(gdb) 
관련 문제