Вопрос такой: Есть длл-ка, которая методом сплайсинга перехватывает вызовы апишек. Она перехватывает CreateFileA. После того как она подключается к процессу, вызывается dllMain. Мне казалось, что она должна будет именно в СВОЕЙ смапированный kernel32 менять начало обработчика. Но оказывается она это делает в библиотеке процесса. Почему так происходит? Ведь поидее она находит адрес функции, используя GetProcAdress(GetModulHandle("kernel32.dll",CreateFileA)). Почему она берет адрес из дллки процесса? И где кстати более менее подробно прочитать про работу загрузчика Windows?
Это зависит от того, в чьем адресном пространстве происходит перехват. Если dll внедрена в адресное пространство целевого процесса, то поиск будет осуществляться в контексте этого процесса. Ну а перехватывать ф-ии в своем адресном пространстве как-то странно .
Codegrammer Образ является проекцией файловой секции, а это не разделяемая память(общих входов в таблицах страниц нет), соответственно память локальна для процесса. Иначе это былабы дыра в безопасности.
странный вопрос... может стоит почитать об организации памяти в виндовс: http://wm-help.net/books-online/book/59464.html (часть III полностью)