> (int)(&some_function) - получается адрес на jmp на функцию
как понять "адрес на jmp на функцию" ?
вызов должен быть примерно таким
push 1 (6a 01) ;допустим
push 2 (6a 02) ;допустим
call FUNCTION (E8 (offset FUNCTION)-(offset RETURN_ADDRESS))
RETURN_ADDRESS:
...
FUNCTION:
где тут jmp ???
приведи машинный код чтобы я понял
а вообще-то похоже на лишнюю оптимизацию
главное тут - в функции живущей в области данных не должно быть ни одного прямого вызова другой функции, иначе тебе придется самому корректировать REL32 компоненту
#pragma push (check_stack)
#pragma off (check_stack)
void some_function(void)
{
int (*printf_indirect)(const char*,...)=&printf;
printf_indirect ("hello from data section!\n");
return;
}
#pragma pop (check_stack)
void some_next_function(void) {}
void main(void)
{
int size_of_function = (int)(&some_next_function) - (int)(&some_function);
int i;
void (*this_we_call)(void) = (void (*)(void)) code_in_data_section;
> (int)(&some_function) - получается адрес на jmp на функцию
как понять "адрес на jmp на функцию" ?
вызов должен быть примерно таким
push 1 (6a 01) ;допустим
push 2 (6a 02) ;допустим
call FUNCTION (E8 (offset FUNCTION)-(offset RETURN_ADDRESS))
RETURN_ADDRESS:
...
FUNCTION:
где тут jmp ???
приведи машинный код чтобы я понял
а вообще-то похоже на лишнюю оптимизацию
главное тут - в функции живущей в области данных не должно быть ни одного прямого вызова другой функции, иначе тебе придется самому корректировать REL32 компоненту
[Win32] Функция в области данных.21.08.02 22:36 Автор: + <Mikhail> Статус: Elderman
> Da potomuchto na VC compilere eta baida ne rabotaet. > > P.S. > I kstati pisal ob etom v tom obsuzhdenii.
У меня в MSVC 6.0 все работает.
Просто надо выкинуть прагмы и компилить в Release с отключенной оптимизацией. Потому что в Debug-версии проекта появляются jmp-ы, про которые писал IgorR, а оптимизатор превращает
int (*printf_indirect)(const char*,...)=&printf;
printf_indirect ("hello from data section!\n");
в
printf("hello from data section!\n");
[Win32] Функция в области данных.22.08.02 03:23 Автор: + <Mikhail> Статус: Elderman
> Thx, > Chto zhe ty tak redko na forum zahodish gliadish togda by > tozhe podskazal. :-)
Да причина банальная - посканировал сеть на работе, бздительные админы и среагировали. Впрочем, надо отдать им должное, терпели они это довольно долго. А потом вдруг пришли к моему начальнику и сказали, что " ваш сотрудник - хакер-факер, занимается @#$ней в рабочее время (вот логи) и всех нас уже зае$ал"
Вот и захожу теперь сюда редко :(