2014-09-18 2 views
2

나는 어셈블리를 배우려고 노력 중이며 간단한 프로그램을 분해하기 위해 gdb를 사용 해왔다. 하지만이 질문에 대한 답을 찾을 수없는 것 같습니다 (어쩌면 내가 뭘 찾아야할지 모르겠다). 각 행의 시작 부분에있는 그 주소는 정확히 무엇을 의미합니까? 하드 드라이브에있는 프로그램 내의 지침 위치입니까? 또는 RAM? 예를 들어gdb의 주소가 정확히 무엇입니까?

는 :

0x080483dc <+0>: push %ebp 
    0x080483dd <+1>: mov %esp,%ebp 
    0x080483df <+3>: sub $0x10,%esp 
+0

도 참조 프로그램과 주소 공간 http://stackoverflow.com/에 대한 자세한 내용을 이해하는 this 기사를 읽을 수 있습니다 enter image description here

:

다음 그림과 같은 프로세스의 메모리 공간이 어떻게 보이는지 설명 질문/79923/what-and-the-the-stack-and-heap – PaulProgrammer

답변

2

사람들은 프로그램의 메모리 공간의 지침의 주소를 나타냅니다.

최신 OS에서는 모든 프로그램이 실행될 때 RAM에 별도의 메모리 공간이 할당됩니다. 그런 다음 이진수는 해당 메모리 공간에 메모리 매핑됩니다. 따라서 모든 수업에는 주소가 있으며, 프로그램에있는 곳을 알기 위해 gdb에 반영됩니다. 당신은

+0

주소의 시작 위치를 결정하는 요소는 무엇입니까 (분명히 0x0가 아닌 것으로 가정하고 있습니다)? 그리고 프로그램을 실행할 때마다 변경됩니까? – nonex

+0

가상 주소 공간의 시작 주소는 항상 0이고 끝은 4GB입니다. 그러나 주소 공간 (TEXT 세그먼트)에서 실행 파일의 시작 주소가 아닐 수도 있지만 OS 구현에 의해 결정됩니다. – Krypton