SpaceHoll0w Posted January 18, 2022 at 11:13 AM Share Posted January 18, 2022 at 11:13 AM queria saber oque ele faz, to com essa duvida em asm..... Não acho algo que consegue me ajudar Quote Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted January 18, 2022 at 01:38 PM Administrators Share Posted January 18, 2022 at 01:38 PM Opa, a instrução não tá completa aí.. falta o segundo argumento do MOV, mas é o seguinte: A sintaxe Intel, que é essa que você usou o exemplo, funciona assim: instrução argumento1, argumento2, argumento3... No caso do MOV, que é uma instrução de cópia de dados e por isso possui dois argumentos, o destino vem primeiro e a origem depois. Então é: mov destino, origem Então no seu exemplo: mov dword ptr ds:[eax + 0x30] Ou seja, você colocou só o destino, por isso a instrução tá incompleta, mas tudo bem, talvez sua dúvida seja no destino mesmo. Esse destino aí diz o seguinte: Copie uma DWORD (palavra dupla, ou seja, 32-bits/4 bytes) para o endereço apontado pelo registrador EAX, mas some 0x30 (48 em decimal) a este endereço antes. Ou seja, suponha que tenhamos o valor 0x950000 no registrador EAX e a instrução completa seja: mov dword ptr ds:[eax + 0x30], 0xffffffff Após executar essa instrução, o valor 0xffffffff será copiado para o endereço 0x950030 (que é o tal EAX + 0x30). O ds vem de data segment e já dá a dica que este é um segmento de dados. No caso de executáveis de Windows, provavelmente este endereço estará na seção .data, já que está sendo usado para escrita (o valor é copiado para lá) e esta seção em geral possui permissão de escrita quando mapeada em memória. Abraço, Fernando Quote Link to comment Share on other sites More sharing options...
SpaceHoll0w Posted January 18, 2022 at 02:17 PM Author Share Posted January 18, 2022 at 02:17 PM (edited) pior falta o "eax, " ? "mov eax, dword ptr ds:[eax + 0x30]" faz? Edited January 18, 2022 at 02:25 PM by SpaceHoll0w Quote Link to comment Share on other sites More sharing options...
SpaceHoll0w Posted January 18, 2022 at 02:24 PM Author Share Posted January 18, 2022 at 02:24 PM 46 minutos atrás, Fernando Mercês disse: Opa, a instrução não tá completa aí.. falta o segundo argumento do MOV, mas é o seguinte: A sintaxe Intel, que é essa que você usou o exemplo, funciona assim: instrução argumento1, argumento2, argumento3... No caso do MOV, que é uma instrução de cópia de dados e por isso possui dois argumentos, o destino vem primeiro e a origem depois. Então é: mov destino, origem Então no seu exemplo: mov dword ptr ds:[eax + 0x30] Ou seja, você colocou só o destino, por isso a instrução tá incompleta, mas tudo bem, talvez sua dúvida seja no destino mesmo. Esse destino aí diz o seguinte: Copie uma DWORD (palavra dupla, ou seja, 32-bits/4 bytes) para o endereço apontado pelo registrador EAX, mas some 0x30 (48 em decimal) a este endereço antes. Ou seja, suponha que tenhamos o valor 0x950000 no registrador EAX e a instrução completa seja: mov dword ptr ds:[eax + 0x30], 0xffffffff Após executar essa instrução, o valor 0xffffffff será copiado para o endereço 0x950030 (que é o tal EAX + 0x30). O ds vem de data segment e já dá a dica que este é um segmento de dados. No caso de executáveis de Windows, provavelmente este endereço estará na seção .data, já que está sendo usado para escrita (o valor é copiado para lá) e esta seção em geral possui permissão de escrita quando mapeada em memória. Abraço, Fernando vlw mano! Quote Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted January 18, 2022 at 03:08 PM Administrators Share Posted January 18, 2022 at 03:08 PM 51 minutos atrás, SpaceHoll0w disse: pior falta o "eax, " kkkkk então tudo que eu falei você aplica na origem. E o registrador EAX é o destino, no caso. ? 44 minutos atrás, SpaceHoll0w disse: vlw mano! é nóis! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.