Ryokusei 21 Postado 2 de Dezembro 2010 Compartilhar Postado 2 de Dezembro 2010 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. Entre ou Cadastre-se Se você a chamasse assim: É necessário se cadastrar para acessar o conteúdo. Entre ou Cadastre-se O compilador faria isso: É necessário se cadastrar para acessar o conteúdo. Entre ou Cadastre-se Só por curiosidade, a função Somade2 seria mais ou menos assim no compilador: É necessário se cadastrar para acessar o conteúdo. Entre ou Cadastre-se Imagine a função: É necessário se cadastrar para acessar o conteúdo. Entre ou Cadastre-se Se você a chamasse assim: É necessário se cadastrar para acessar o conteúdo. Entre ou Cadastre-se O compilador faria isso: É necessário se cadastrar para acessar o conteúdo. Entre ou Cadastre-se Só por curiosidade, a função Somade5 seria mais ou menos assim no compilador: É necessário se cadastrar para acessar o conteúdo. Entre ou Cadastre-se 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. Entre ou Cadastre-se 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. Entre ou Cadastre-se É necessário se cadastrar para acessar o conteúdo. Entre ou Cadastre-se ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
DarkSj 0 Postado 2 de Dezembro 2010 Compartilhar Postado 2 de Dezembro 2010 huahuahua desculpa minha ignorancia, mas pra qe serve isso? ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Ryokusei 21 Postado 2 de Dezembro 2010 Autor Compartilhar Postado 2 de Dezembro 2010 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?". ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
DarkSj 0 Postado 2 de Dezembro 2010 Compartilhar Postado 2 de Dezembro 2010 aaah n tinha intendido mas depois qe você disse: "Isso serve para quem faz engenharia reversa em aplicativos escritos em Delphi" ai entendi melhor obrigado por postar (: ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
DragonBoss 8 Postado 2 de Dezembro 2010 Compartilhar Postado 2 de Dezembro 2010 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 =] ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Owner 7 Postado 2 de Dezembro 2010 Compartilhar Postado 2 de Dezembro 2010 Muito bom o tópico ! Mas nunca ouvi falar disso não Valeu por comentar e explicar, já debuguei uns programas sem querer, mas nunca reparei isso (: Até e Abrasz :amor: ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Drakar~ 0 Postado 3 de Dezembro 2010 Compartilhar Postado 3 de Dezembro 2010 Gostei, bem explicado e simples de entender, quando tiver um tempinho vou fazer ums debbugers por ai, xD, Levou Thank's ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
felipeanchieta 3 Postado 4 de Dezembro 2010 Compartilhar Postado 4 de Dezembro 2010 Bom, funções em ASM é uma coisa um tanto complicada, ainda mais essas funções esquisitas do Delphi =S Sou mais a _cdecl e stdcall do C que são mais simples. ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados