동일한 .exe 파일을 디스 어셈블리 할 때마다 동일한 명령이 동일한 주소에있는 이유는 무엇입니까? 그리고 그 주소는 무엇입니까 (RAM? HDD? 가상?)?어셈블리 명령 주소
답변
기본적인 아이디어는 프로그램의 이식성을 허용하고 서로 충돌하지 않고 동일한 시스템에서 다른 프로그램을 실행할 수 있도록하기 위해 기본적으로 프로그램이 실행될 때 OS가 실제 주소로 변환하는 상대 주소에 해당합니다. .
주소가 필요한 이유는 점프와 같은 다른 지침의 주소를 참조하는 지침 때문입니다.
이유가 없습니다. O/S에 대한 실행 가능/링크 형식이 어떻게 작동하기로 결정했는지입니다. 예를 들어 x86 및 x64에서도 모든 아키텍처가 다르지만 실행 파일은 무작위 가상 주소 또는 매번 동일한 주소에서로드 할 수 있습니다. disassembler는 파일에 오프셋을 주거나 런타임에 결정된 기본 주소 + 파일 오프셋 및 가능한 경우 섹션 오프셋 인 가상 주소를 제공합니다. 이것은 고도 아키텍처에 따라 다르므로 실제 응답을 드릴 수는 없습니다 ...
무언가를하는 다양한 방법이 있다는 사실은 전혀 이유가 없음을 암시하지 않습니다. – danben
@danben : x86의 경우 데이터는 명령어가 직접적으로 해당 VA를 가리 키기 때문에 항상 동일한 가상 주소를 얻습니다. 따라서 x86에서이 방법을 사용하는 것이 더 편리합니다. 그러나 라이브러리의 경우 가상 주소는 재배치 가능해야합니다. 그렇지 않으면 충돌을 일으킬 수 있습니다. x64에서는 상대 주소를 쉽게 참조 할 수 있습니다. 따라서 ** 직접 주소 지정을 사용하는 이유는 없습니다 ** 따라서 모든 VAI가 실행될 때마다 개발자가 수행하는 것처럼 느껴지 기 때문에 완료되었습니다. 요즘에는 모든 멋진 애들이 ASLR을 사용하기 때문에 이전과 같이 많은 정적 VA 기반. –
내 유일한 요점은 충돌을 피하거나 보안을 향상시키기 위해 * 무언가 *를해야한다는 것입니다. OP의 질문에 대한 대답 인 것 같습니다 - 나는 한 기술의 장점에 대해 묻지 않았다고 생각합니다. 다른. – danben
- 1. 어셈블리 프로그래밍에서 스택의 시작 주소 받기
- 2. 성 ActiveRecord - 명령 행 어셈블리 대 VB.Net 어셈블리 문제
- 3. 다음의 x86 어셈블리 명령을 감안할 때 명령
- 4. Maven 어셈블리 : 어셈블리
- 5. 주소 주소
- 6. 어셈블리 해시보기
- 7. 어셈블리 문제
- 8. MAC 주소 (IP 주소 :
- 9. 디버깅 할 때 어셈블리 이름을 명령 줄 인수로 전달하는 방법
- 10. 어셈블리 언어 : ax 명령 줄의 값은 어떻게 인쇄합니까?
- 11. C에서 인라인 어셈블리 : INT 명령 및 C 변수
- 12. 86 어셈블리
- 13. 웹 참조로 어셈블리 분리
- 14. 어셈블리 8086 프로그램 - 어셈블리 오류
- 15. Maven 어셈블리 - 모듈 어셈블리 호출
- 16. 페이지 내부 주소 별도 주소
- 17. 클라이언트의 IP 주소/MAC 주소
- 18. 상대 주소 및 절대 주소
- 19. 레이블 주소 계산
- 20. 86 가상 주소 길이
- 21. GACing 4.0 어셈블리
- 22. 연결 .Net 어셈블리
- 23. 어셈블리 밖에서 엔티티 노출하기
- 24. 실행 PowerShell 명령
- 25. LINQ 외래 키 관계 명명 (주소, 주소 1, 주소 2)
- 26. .NET 어셈블리 이해
- 27. 64 비트 어셈블리 프로그램에서 RIP 상대 주소 지정을 사용하는 방법은 무엇입니까?
- 28. WCF 호스트 주소 질문
- 29. 어셈블리 언어 ccr 문제 학습 어셈블리
- 30. clr in 호스팅 어셈블리 C++ - 어셈블리 경로
가상 주소 인 것과는 아무 관련이 없습니다. OS 로더는 주소 확인 방법에 관계없이 메모리에있는 이미지로드 위치를 기반으로 함수 주소를 변경합니다 (사실상 또는 비공유). –
사실입니다. 나는 개념을 뒤섞고 있다고 생각한다. 내 대답을 편집하여 해당 부분을 제거합니다. – danben