카테고리 없음

#pragma comment(linker, "") 란?

TwoIceFish 2018. 6. 14. 22:27

#pragma comment(linker, "/BASE:0x13140000")


역할

기본 옵션.exe 또는 DLL 파일에 대 한 기본 위치 즉 프로그램에 대 한 기본 주소를 재설정 합니다.

32 비트 이미지는 0x400000

64 비트 이미지는 0x140000000 가 기본값입니다


주소 공간 레이아웃 불규칙화 (ASLR)를 지원 하지 않거나  /dynamicbase: no 옵션 설정 된 경우 코딩내 기준 이미지 베이스 값을 우선 적용합니다.


위의문장 적용시 image Base의 값이 바뀝니다.


https://msdn.microsoft.com/en-us/library/f7f5138s.aspx




#pragma comment(linker, "/MERGE:.rdata=.text") 


역할

MERGE:.A=B

A섹션과 B섹션의이름을 묶어서 B의 이름으로 이름짓는 것이다.

예를들어 `/merge:.rdata=.text`. 의 경우 text의 이름이 존재하지 않는경우 링크가 .rdata의 이름을 .text의 이름으로 바꾼다 


장점

-VxD(16비트 버전의 마이크로소프트 윈도에서 쓰이는 장치 드라이버 모델)을 만드는데 유용하다고 한다.

-섹션이름을 재정의 하는데 유용하다


Visual Studio IDE(통합개발환경)에서의 설정

프로젝트 속성페이지 -> 구성 속성 -> 링커 -> 고급 -> 섹션 병합 (/merge:.rdata=.text) 입력시 병합



 #include<stdio.h>

#pragma comment(linker, "/MERGE:.text=.pig")

void main ()

{

}

의 컴파일후 파일 구조의 차이



https://msdn.microsoft.com/en-us/library/wxz26dz2.aspx




#pragma comment(linker, "/SECTION:.text,EWR") 


역할

해당섹션의 속성을 변경합니다


|Character|Attribute|Meaning|   |---------------|---------------|-------------|   

|E|Execute|The section is executable|   

|R|Read|Allows read operations on data|  

|W|Write|Allows write operations on data|  

|S|Shared|Shares the section among all processes that load the image|   

|D|Discardable|Marks the section as discardable|   

|K|Cacheable|Marks the section as not cacheable|  

|P|Pageable|Marks the section as not pageable|  


의미

.text섹션의 속성을 실행가능 읽기 쓰기 가능으로 변경합니다.