Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×

Convenção de Chamada do Delphi


Ryokusei
 Compartilhar

Posts Recomendados

O Delphi, ao contrário de outras linguagens, utiliza como padrão a convenção de chamada fastcall (também usa thiscall, mas em geral é fastcall).

O Delphi segue a seguinte ordem para os argumentos:

 

1º Argumento = EAX

2º Argumento = EDX

3º Argumento = ECX

 

Os argumentos seguintes vão na stack (PUSH <argumento>), ou seja, do quarto argumento em diante é como se a função fosse stdcall (não entenda como uma stdcall porque não é, essa foi só uma frase ilustrativa).

 

Ex:

 

Imagine a função:

 

É necessário se cadastrar para acessar o conteúdo.

 

Se você a chamasse assim:

 

É necessário se cadastrar para acessar o conteúdo.

 

O compilador faria isso:

 

É necessário se cadastrar para acessar o conteúdo.

 

Só por curiosidade, a função Somade2 seria mais ou menos assim no compilador:

 

É necessário se cadastrar para acessar o conteúdo.

 

Imagine a função:

 

É necessário se cadastrar para acessar o conteúdo.

 

Se você a chamasse assim:

 

É necessário se cadastrar para acessar o conteúdo.

 

O compilador faria isso:

 

É necessário se cadastrar para acessar o conteúdo.

 

Só por curiosidade, a função Somade5 seria mais ou menos assim no compilador:

 

É necessário se cadastrar para acessar o conteúdo.

 

FAQ

 

Q: E como ficam as funções que recebem um número variável de argumentos, por exemplo a função "Concat"?

A: Aí é diferente, o Delphi poderia usar a convenção cdecl, mas ele faz de outro jeito, ele faz assim:

 

É necessário se cadastrar para acessar o conteúdo.

 

Enfim, o Delphi faz coisas do jeito dele pra cada situação, isso é só um jeito de prever como vão ficar as coisas na memória.

 

Q: Como posso descobrir isso tudo do tutorial?

A: Debugue alguns aplicativos feitos no Delphi. O ideal é você criar uns com esses exemplos pra ver com seus próprios olhos.

 

Q: Como posso mudar a convenção de chamada de uma função/procedimento?

A: Adicione diretivas no final da declaração da função.

Ex:

 

É necessário se cadastrar para acessar o conteúdo.

É necessário se cadastrar para acessar o conteúdo.
Link para o comentário
Compartilhar em outros sites

huahuahua

desculpa minha ignorancia, mas pra qe serve isso?

 

Isso serve para quem faz engenharia reversa em aplicativos escritos em Delphi.

Alguns podem se confundir achando que o mundo é stdcall, e quando se deparam com um fastcall ficam pensado "ué a função não leva argumentos?".

Link para o comentário
Compartilhar em outros sites

Muito interessante mesmo.... um otimo artigo, nunca tinha visto nada explicado da forma que você explicou ( simples, porém clara e objetiva ).

 

Vo debugar uns aplicativos pra ver se entendo algo das funçoes na memoria Y_Y'

 

Vlw Ryo

 

=]

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.