Интересует можно ли както заставить линкер студии разместить данные в кодосекции (тут панятна "/MERGE:") но так дыба не менял месторасположение, т.е. Код (Text): void proc1(void) { return; } BYTE data[] = {0x40,0x41,0x42}; void proc2(void) { return; } в итоге интересует да, еще бы выключить генерацию (выравнивание?) 0xcc после\между фунок, дабы однозначно размещение было возможно такое вообще на студии 2008? *и вопрос2* Код (Text): typedef VOID (*MY_PROC)(VOID); BYTE _code[] = {0xcc,0xc2}; void main(void) { ((MY_PROC)code)(); } только заставить линкер генерить относительный call а не Код (Text): mov eax, offset _code call eax *or* call [_code] думал linktime code generation поможет ему разобраться что по чем, но генерит не то чего хотелось бы(
запросто Код (Text): extern "C" void func1(){} #pragma data_seg(push, r1, ".text") extern "C" __declspec(selectany,allocate(".text")) some_t subj; #pragma data_seg(pop, r1) extern "C" void func2(){} и в файле order.txt надо прописать func1 subj func2 в настройках линкера /ORDER:@order.txt в памяти subj должен находится между функциями а ключ ORDER будет следить за порядком расположения и да чтоб убрать между функциями 0xcc заключи весь код в прагму вот так Код (Text): #pragma optimize("gs", on) extern "C" void func1(){} #pragma data_seg(push, r1, ".text") extern "C" __declspec(selectany,allocate(".text")) some_t subj; #pragma data_seg(pop, r1) extern "C" void func2(){} #pragma optimize("", on)
и да наверняка пригодится поставить атрибуты на секцию RWE Код (Text): #pragma comment(linker, "/SECTION:.text,RWE") #pragma optimize("gs", on) extern "C" void func1(){} #pragma data_seg(push, r1, ".text") extern "C" __declspec(selectany,allocate(".text")) some_t subj; #pragma data_seg(pop, r1) extern "C" void func2(){} extern "C" void end_code(){} #pragma optimize("", on) size_t shell_size = (DWORD)end_code - (DWORD)func1; что особенно удобно можно иметь глобальные переменные между функциями и не надо извращатся запихивать их в функции через _emit
ордер мне матерился на мои данные - не могу добавить ванингом отвечал.. попробую по вашему варианту, сенкс!