ID ou memória de função

1. ID ou memória de função

Jefferson
blastin

(usa Debian)

Enviado em 12/04/2013 - 00:10h

Olá comunidade vivaolinux,
Gostaria de pedir atenção sobre um pequeno problema a qual me deparei em meu projeto na linguagem C.
Estou trabalhando em um protótipo "Thread" e necessito de uma "informação", praticamente quase final para encerrar a primeira parte.

Tenho a necessidade infelizmente de saber qualquer informação da função que abriu chamada a uma dada função

Para exemplificar:


void functionw(void)
{

function2();

}


void function2(void)
{
if(?????? == _functionw)
printf("Oii functionw");

}

Eu poderia muito bem enviar function2(memory_functionw), contudo gostaria de saber se há alguma possibilidade desta realização.

Obs: caso isto possa acontecer trabalhando com código assembly ,gostaria de saber como. Pois não tenho nenhum conhecimento ainda com asm....



  


2. Re: ID ou memória de função

Paulo
paulo1205

(usa Ubuntu)

Enviado em 12/04/2013 - 00:36h

Você poderia ter dito qual o seu compilador, sistema operacional, e arquitetura (por exemplo: se i386 ou amd64), pois tudo isso influencia na resposta.

Se você puder mexer na função chamada para fazer com que ela receba mais um parâmetro do tipo const char *, poderia usar a macro __FUNC__, que expande para o nome da função corrente, sempre que invocasse a função que precisa saber quem a chamou.

Contudo, uma coisa me deixa curioso: para quê você quer isso? Geralmente um dos critérios para a divisão em funções é a independência relativas entre tais funções. Fora do caso de depuração, em que se poderia querer examinar o fluxo de execução, fico imaginando se você talvez não deveria rever o modo como modularizou seu projeto.


3. Re: ID ou memória de função

Jefferson
blastin

(usa Debian)

Enviado em 12/04/2013 - 01:09h


Bem eu estou programando com total portabilidade . Pelo menos até agora.

Sim, as funções tem independência total entre elas. Eu apenas estou tentando encontrar uma melhor forma de manejar a entrada e saída de cada função, de forma que não fique volumoso a base do meu protótipo.


Esta macro __FUNC__ Parece ser interessante, mas não fica trivial para chamada.

Tentarei fazer umas mudanças pois acho que este pedido não é muito fácil de se achar.





4. Re: ID ou memória de função

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 12/04/2013 - 06:59h

Olá,


O Paulo está muito correto na observação (como sempre é um professor).

De qualquer forma, se buscar fazer "log" sobre o programa, para depuração,
pode utilizar

printf("%s", __FUNC__);

A macro irá substituir o nome função, assim imprimindo a mesma.
E olha que legal, isso fica dinâmico.


5. Re: ID ou memória de função

???
gokernel

(usa Linux Mint)

Enviado em 12/04/2013 - 08:17h

@blastin:
"Obs: caso isto possa acontecer trabalhando com código assembly ,gostaria de saber como. Pois não tenho nenhum conhecimento ainda com asm...."

Se vc usa o compilador gcc, fica a dica:
Use o programa ( objdump ) para "descompilar" um programa/função compilado com o gcc:
-------------------------------------------------
objdump -d programa > arquivo_de_saida
-------------------------------------------------

Esse "arquivo_de_saida" tem o código do seu programa em assembly.

Geralmente faço isso para poupar um bom tempo quando preciso de algo em assembly...

Se usar o Visual Studio da MicroSoft, esse processo é doloroso ... ele cria apenas uma única função em assembly ... O Bill não gosta de facilitar as coisas ;)



6. Re: ID ou memória de função

Paulo
paulo1205

(usa Ubuntu)

Enviado em 12/04/2013 - 11:54h

Dá para saber o endereço de cada função, também, é claro. E existem as funções (Extensões da GNU) backtrace() e backtrace_symbols().


7. Re: ID ou memória de função

Jefferson
blastin

(usa Debian)

Enviado em 12/04/2013 - 21:55h

Consegui resolver de uma forma bem simples. Contudo agradeço ajuda de todos :).. Farei depois alguns testes tanto com __FUNC__ e essas duas funções muito interessante.




8. Re: ID ou memória de função

???
gokernel

(usa Linux Mint)

Enviado em 14/04/2013 - 18:48h


@blastin:
"Obs: caso isto possa acontecer trabalhando com código assembly ,gostaria de saber como. Pois não tenho nenhum conhecimento ainda com asm...."

E-book on-line:
http://cs.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html

http://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/
----------------------------------------------------
Ou pegar esse arquivo:

Art Of Intel x86 Assembly.pdf

Esse E-book é ótimo ...
----------------------------------------------------

E bons estudos com Assembly e Inglês !!!



9. Re: ID ou memória de função

Jefferson
blastin

(usa Debian)

Enviado em 16/04/2013 - 14:19h

Muito obrigado pelo conteúdo ando sem tempo mas adorarei procurar aprender um pouco... :D






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts