Pergunta

Acabo de entrar em programação de baixo nível (leitura / escrita para a memória esse tipo de coisa) e ter executado em um problema não consigo encontrar uma resposta.

O pedaço de informação que eu quero ler em tem um endereço que é relativo a um DLL carregado na memória e, g, é a mydll.dll + 0x01234567. o im problema tendo é que a DLL se move em torno na memória, mas as estadias compensar o mesmo. Existe uma maneira de descobrir a localização desta DLL na memória.

Atualmente, estou tentando fazer isso de preferência em c #, mas eu ficaria grato pela ajuda na maioria das linguagens de nível highish.

Foi útil?

Solução

i tentou o método Rob Walker sugeriu e não poderia fazê-lo funcionar (eu acho que não funcionou porque a DLL foi carregado como parte de um outro executável para que ele não poderia ser encontrado tão facilmente).

No entanto, eu descobrir uma solução que funcionou para mim, então aqui está:

i criado um objeto do tipo de processo

String appToHookTo = "applicationthatloadedthedll";
Process[] foundProcesses = Process.GetProcessesByName(appToHookTo)
ProcessModuleCollection modules = foundProcesses[0].Modules;
ProcessModule dllBaseAdressIWant = null;
foreach (ProcessModule i in modules) {
if (i.ModuleName == "nameofdlliwantbaseadressof") {
                    dllBaseAdressIWant = i;
                }
        }

Agora você tem o módulo que você pode apenas fazer dllbaseAdressIWant.BaseAddress para obter o valor.

Espero que isso ajude

Outras dicas

Do ponto de vista Win32 você precisa usar o GetModuleHandle e GetModuleInformation funções. Estes permitem-lhe olhar a alça do módulo-se pelo nome, e em seguida, recuperar informações, incluindo o endereço de base nisso alça.

Deve ser para a frente para embrulhar essas APIs usando wrappers o padrão P / Invoke.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top