Jump to content

oque mov dword ptr ds:[eax + 0x30] faz?


SpaceHoll0w

Recommended Posts

  • Administrators

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

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...