2010-06-14 6 views
0

동일한 .exe 파일을 디스 어셈블리 할 때마다 동일한 명령이 동일한 주소에있는 이유는 무엇입니까? 그리고 그 주소는 무엇입니까 (RAM? HDD? 가상?)?어셈블리 명령 주소

답변

1

기본적인 아이디어는 프로그램의 이식성을 허용하고 서로 충돌하지 않고 동일한 시스템에서 다른 프로그램을 실행할 수 있도록하기 위해 기본적으로 프로그램이 실행될 때 OS가 실제 주소로 변환하는 상대 주소에 해당합니다. .

주소가 필요한 이유는 점프와 같은 다른 지침의 주소를 참조하는 지침 때문입니다.

+0

가상 주소 인 것과는 아무 관련이 없습니다. OS 로더는 주소 확인 방법에 관계없이 메모리에있는 이미지로드 위치를 기반으로 함수 주소를 변경합니다 (사실상 또는 비공유). –

+0

사실입니다. 나는 개념을 뒤섞고 있다고 생각한다. 내 대답을 편집하여 해당 부분을 제거합니다. – danben

0

이유가 없습니다. O/S에 대한 실행 가능/링크 형식이 어떻게 작동하기로 결정했는지입니다. 예를 들어 x86 및 x64에서도 모든 아키텍처가 다르지만 실행 파일은 무작위 가상 주소 또는 매번 동일한 주소에서로드 할 수 있습니다. disassembler는 파일에 오프셋을 주거나 런타임에 결정된 기본 주소 + 파일 오프셋 및 가능한 경우 섹션 오프셋 인 가상 주소를 제공합니다. 이것은 고도 아키텍처에 따라 다르므로 실제 응답을 드릴 수는 없습니다 ...

+0

무언가를하는 다양한 방법이 있다는 사실은 전혀 이유가 없음을 암시하지 않습니다. – danben

+0

@danben : x86의 경우 데이터는 명령어가 직접적으로 해당 VA를 가리 키기 때문에 항상 동일한 가상 주소를 얻습니다. 따라서 x86에서이 방법을 사용하는 것이 더 편리합니다. 그러나 라이브러리의 경우 가상 주소는 재배치 가능해야합니다. 그렇지 않으면 충돌을 일으킬 수 있습니다. x64에서는 상대 주소를 쉽게 참조 할 수 있습니다. 따라서 ** 직접 주소 지정을 사용하는 이유는 없습니다 ** 따라서 모든 VAI가 실행될 때마다 개발자가 수행하는 것처럼 느껴지 기 때문에 완료되었습니다. 요즘에는 모든 멋진 애들이 ASLR을 사용하기 때문에 이전과 같이 많은 정적 VA 기반. –

+0

내 유일한 요점은 충돌을 피하거나 보안을 향상시키기 위해 * 무언가 *를해야한다는 것입니다. OP의 질문에 대한 대답 인 것 같습니다 - 나는 한 기술의 장점에 대해 묻지 않았다고 생각합니다. 다른. – danben