최근에 해킹에 대한 책과 기사를 읽으려는 시도가있었습니다. 그걸 알아 냈습니다. 해킹 : 착취 기술은입니다. 표준 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)
텍스트의 문법 오류는 인정합니다. :)
귀하의 노 부작용 기능이 아마도 컴파일러에 의해 제거, 또는 적어도 인라인했다. –
'main' 밖에서'stack_func'을 움직이려 했습니까? –
예 지금 오류 메시지가 표시됩니다. '디버깅 할 프로세스가 없다면 그렇게 할 수 없다. ' – Jacobe