Приветствую всех. Возникла необходимость определенную переменную поместить в отдельную секцию с атрибутами RW. Привожу код Код (Text): #pragma once #define WIN32_LEAN_AND_MEAN #include <windows.h> #pragma data_seg(push, RWData, ".depu") static LPSTR rgFuncs[7][7] = { { "Abcde", "GDFK", "ppprogfd" } }; #pragma data_seg(pop, RWData) #pragma comment(linker, "/SECTION:.depu,RWE") int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { *rgFuncs[0][0] = 'c'; MessageBoxA(0,rgFuncs[0][0],0,0); ExitProcess(0); return 0; } Пользуюсь 2008 Студией. Вроде как все ок. Если переменная в секции RW, то код должен сработать. Но оказывается, что студия не помещает переменную в отдельную секцию. Почему так? Прошу вас проверить на других студиях, либо дать комментарии этой странности. Добавлю, если же переменную сделать так: Код (Text): .... static char rgFuncs[7] = { 'a','b','c','\0' }; .... //обращение rgFuncs[0] = 'c'; В этом случае все работает. Переменная перемещается в новую секцию. То есть, второе условие - не менять изначальный код переменной (остальное менять можно, главное чтоб смысл оставался).
Сама rgFuncs в .depu(rw), но указатели адресуют .rdata. Оно и понятно, "Abcde" это const char*, тут уж ничего не попишешь. Мне представляется единственный вариант: Код (Text): static char rgFuncs[][3][20] = { { "Abcde", "GDFK", "ppprogfd" } }; Тогда компилер встроит строки непосредственно в массив.