80 likes | 148 Views
IHS – Aula Prática Integração C e Assembly. Integração C e Assembly em ambiente Linux. Makefile : textfile: textfile.o linlib.o - dependência gcc textfile.o linlib.o –o textfile - como obter textfile textfile.o: testfile.asm - dependência
E N D
IHS – Aula Prática Integração C e Assembly
Integração C e Assembly em ambiente Linux • Makefile: textfile: textfile.o linlib.o - dependência gcc textfile.o linlib.o –o textfile - como obter textfile textfile.o: testfile.asm - dependência nasm –f elf textfile.asm - como obter textfile.o linlib.o: linlib.asm - dependência nasm –f elf linlib.asm - como obter linlib.o
Integração C e Assembly em ambiente Linux • Usando Funções de Tempo do C • Está estabelecido que a “Era” Unix iniciou-se em 1 de Janeiro de 1970 as 00:00:00 hs • Quando você ler o tempo ou uma data através de bibliotecas do C, você obtêm o número atual desta associado a uma variável. • Esta variável é denominada time_t. • Para obter o valor de time_t, chama-se a função time.
Integração C e Assembly em ambiente Linux • Usando Funções de Tempo do C • A função time pode retornar valores de duas maneiras: • em EAX • em um buffer que você tenha definido • Para ter o tempo armazenado no buffer você tem que passar o ponteiro do endereço inicial do buffer como parâmetro (via pilha). • Se você não quer armazenar o tempo no buffer, você tem que passar um ponteiro nulo (0) como parâmetro.
Integração C e Assembly em ambiente Linux • Usando Funções de Tempo do C [SECTION .text] global main extern time main : push epb mov ebp,esp push ebx push esi push edi push dword 0 call time add esp,4 mov [oldtime],eax pop edi pop esi pop ebx mov esp,ebp pop ebp ret [SECTION .data] … [SECTION .bss] oldtime resb 4
Integração C e Assembly em ambiente Linux • Usando Funções de Tempo do C • Existe uma função que converte o valor obtido por time em uma string formatada como o exemplo: Thu Dec 2 13:59:20 1999 • Esta função é ctime. • Para usa-la você deve passar o endereço da variável que tem a informação do tempo. • ctime devolve em EAX um ponteiro para string.
Integração C e Assembly em ambiente Linux • Usando Funções de Tempo do C [SECTION .text] global main extern time extern ctime main : push epb mov ebp,esp push ebx push esi push edi push dword 0 call time add esp,4 mov [oldtime],eax push dword oldtime ;empilha-se o endereço ; de oldtime call ctime ; retorna um ponteiro ; para a string em EAX add esp,4 … pop edi pop esi pop ebx mov esp,ebp pop ebp ret [SECTION .data] … [SECTION .bss] oldtime resb 4