• Nenhum resultado encontrado

PASSAGEM DE DE PARÂMETROS ENTRE ROTINAS

N/A
N/A
Protected

Academic year: 2021

Share "PASSAGEM DE DE PARÂMETROS ENTRE ROTINAS"

Copied!
12
0
0

Texto

(1)

PASSAGEM DE PARÂMETROS ENTRE ROTINAS

PASSAGEM DE PARÂMETROS ENTRE ROTINAS

QUANDO UMA ROTINA CHAMA OUTRA ATRAVÉS DE UMA INSTRUÇÃO CALL,

NECESSITA, ÀS VEZES, TRANSFERIR DADOS, OU PONTEIROS PARA DADOS, SOBRE OS QUAIS A ROTINA CHAMADA DEVERÁ ATUAR.

QUANDO UMA ROTINA CHAMA OUTRA ATRAVÉS DE UMA INSTRUÇÃO CALL,

NECESSITA, ÀS VEZES, TRANSFERIR DADOS, OU PONTEIROS PARA DADOS, SOBRE OS QUAIS A ROTINA CHAMADA DEVERÁ ATUAR.

AS DUAS FORMAS MAIS COMUNS DE SE TRANSFERIR DADOS ENTRE ROTINAS SÃO: - ATRAVÉS DE REGISTRADORES DA CPU

- COPIANDO-OS PARA ALGUM LUGAR PREDEFINIDO NA MEMÓRIA

AS DUAS FORMAS MAIS COMUNS DE SE TRANSFERIR DADOS ENTRE ROTINAS SÃO: - ATRAVÉS DE REGISTRADORES DA CPU

- COPIANDO-OS PARA ALGUM LUGAR PREDEFINIDO NA MEMÓRIA

A PRIMEIRA ALTERNATIVA →→→→ MAIS EFICIENTE EM TERMOS DE VELOCIDADE LIMITAÇÃO: →→→→ ESCASSEZ DE REGISTRADORES DISPONÍVEIS A PRIMEIRA ALTERNATIVA →→→→ MAIS EFICIENTE EM TERMOS DE VELOCIDADE LIMITAÇÃO: →→→→ ESCASSEZ DE REGISTRADORES DISPONÍVEIS

A SEGUNDA ALTERNATIVA:

EFICIÊNCIA PODE SER MELHORADA ESTRUTURANDO-SE A ÁREA DE MEMÓRIA UTILIZADA NA FORMA DE UMA PILHA (BUFFER LIFO). A SEGUNDA ALTERNATIVA:

EFICIÊNCIA PODE SER MELHORADA ESTRUTURANDO-SE A ÁREA DE MEMÓRIA UTILIZADA NA FORMA DE UMA PILHA (BUFFER LIFO).

(2)

ESTRUTURA E OPERAÇÃO DA PILHA

ESTRUTURA E OPERAÇÃO DA PILHA

REGISTRADOR SS APONTA PARA O INÍCIO DO

SEGMENTO DE PILHA (VIA DESCRITOR) L IM IT E LIMITE ESPECIFICA O TAMANHO MÁXIMO DA PILHA REGISTRADOR ESP

APONTA PARA O ÚLTIMO DADO INSERIDO NA PILHA (VIA INSTRUÇÃO PUSH)

REGISTRADOR EBP

APONTA PARA DADOS NO SEGMENTO DE PILHA OPERAÇÃO PUSH X:

INSERE UM DADO NA PILHA

A) DECREMENTA ESP B) COPIA O DADO X PARA A POSIÇÃO APONTADA POR ESP

OPERAÇÃO POP X:

EXTRAI UM DADO DA PILHA

A) COPIA O DADO APONTADO POR ESP PARA X

B) INCREMENTA ESP

OFFSET 0

OFFSET MÁXIMO (LIMITE)

TOS = TOP OF THE STACK

4 BYTES (DEFAULT)

PILHA (STACK)

(3)

LARGURA DOS OPERANDOS EM BITS NA ARQUITETURA IA-32

LARGURA DOS OPERANDOS EM BITS NA ARQUITETURA IA-32

UM SEGMENTO DE CÓDIGO POSSUI EM SEU DESCRITOR UM BIT - BIT D - QUE ESPECIFICA A LARGURA “DEFAULT” DOS DADOS SOBRE OS QUAIS OPERA. UM SEGMENTO DE CÓDIGO POSSUI EM SEU DESCRITOR UM BIT - BIT D - QUE ESPECIFICA A LARGURA “DEFAULT” DOS DADOS SOBRE OS QUAIS OPERA.

BIT D = 0 →→→→ LARGURA DEFAULT DOS OPERANDOS É 16 BITS BIT D = 1 →→→→ LARGURA DEFAULT DOS OPERANDOS É 32 BITS BIT D = 0 →→→→ LARGURA DEFAULT DOS OPERANDOS É 16 BITS BIT D = 1 →→→→ LARGURA DEFAULT DOS OPERANDOS É 32 BITS

INSTRUÇÕES PUSH E POP TRANFEREM DADOS PARA E DA PILHA COM A LARGURA DEFAULT DO SEGMENTO DE CÓDIGO QUE ESTÁ EXECUTANDO:

- 4 BYTES PARA SEGMENTOS DE CÓDIGO DE 32 BITS E - 2 BYTES PARA SEGMENTOS DE CÓDIGO DE 16 BITS.

INSTRUÇÕES PUSH E POP TRANFEREM DADOS PARA E DA PILHA COM A LARGURA DEFAULT DO SEGMENTO DE CÓDIGO QUE ESTÁ EXECUTANDO:

- 4 BYTES PARA SEGMENTOS DE CÓDIGO DE 32 BITS E - 2 BYTES PARA SEGMENTOS DE CÓDIGO DE 16 BITS.

PODE-SE ALTERAR A LARGURA DEFAULT DO OPERANDO TRANSFERIDO POR PUSH E POP (E TAMBÉM DAS INSTRUÇÕES MOV EM CASO DE SEGMENTO DE DADOS)

PREFIXANDO-SE AS INSTRUÇÕES PUSH E POP (OU MOV) COM O PREFIXO 66H.

PODE-SE ALTERAR A LARGURA DEFAULT DO OPERANDO TRANSFERIDO POR PUSH E POP (E TAMBÉM DAS INSTRUÇÕES MOV EM CASO DE SEGMENTO DE DADOS)

(4)

LARGURA DOS OPERANDOS - EXEMPLOS

LARGURA DOS OPERANDOS - EXEMPLOS

SEGMENTO DE CÓDIGO DE 32 BITS ( BIT D = 1). SEGMENTO DE CÓDIGO DE 32 BITS ( BIT D = 1).

INSTRUÇÃO:

INSTRUÇÃO: CODIFICAÇÃO:CODIFICAÇÃO: EFEITO:EFEITO:

PUSH EAX

PUSH EAX 50 h50 h INSERE 32 BITS DE EAX NA A PILHAINSERE 32 BITS DE EAX NA A PILHA

PUSH AX

PUSH AX 66 50 h66 50 h INSERE 16 BITS DE AX NA A PILHAINSERE 16 BITS DE AX NA A PILHA

SEGMENTO DE CÓDIGO DE 16 BITS ( BIT D = 0). SEGMENTO DE CÓDIGO DE 16 BITS ( BIT D = 0).

INSTRUÇÃO:

INSTRUÇÃO: CODIFICAÇÃO:CODIFICAÇÃO: EFEITO:EFEITO:

PUSH EAX

PUSH EAX 66 50 h66 50 h INSERE 32 BITS DE EAX NA A PILHAINSERE 32 BITS DE EAX NA A PILHA

PUSH AX

(5)

UTILIZAÇÃO DA PILHA PARA PASSAGEM DE PARÂMETROS

UTILIZAÇÃO DA PILHA PARA PASSAGEM DE PARÂMETROS

QUANDO UMA ROTINA (OU FUNÇÃO) CHAMADORA PASSA PARÂMETROS PARA UMA ROTINA (OU FUNÇÃO) CHAMADA ATRAVÉS DA PILHA, É NECESSÁRIO

CONVENCIONAR NO MÍNIMO:

A) A SEQÜÊNCIA EM QUE OS PARÂMETROS SERÃO PASSADOS.

B) QUAL DAS DUAS ROTINAS - CHAMADORA OU CHAMADA - FICARÁ ENCARREGADA DA RETIRADA (LIMPEZA) DOS DADOS DA PILHA AO FINAL DA EXECUÇÃO.

QUANDO UMA ROTINA (OU FUNÇÃO) CHAMADORA PASSA PARÂMETROS PARA UMA ROTINA (OU FUNÇÃO) CHAMADA ATRAVÉS DA PILHA, É NECESSÁRIO

CONVENCIONAR NO MÍNIMO:

A) A SEQÜÊNCIA EM QUE OS PARÂMETROS SERÃO PASSADOS.

B) QUAL DAS DUAS ROTINAS - CHAMADORA OU CHAMADA - FICARÁ ENCARREGADA DA RETIRADA (LIMPEZA) DOS DADOS DA PILHA AO FINAL DA EXECUÇÃO.

OS DOIS CRITÉRIOS ACIMA PERMITEM ESTABELECER DIVERSAS CONVENÇÕES DE CHAMADA.

OS DOIS CRITÉRIOS ACIMA PERMITEM ESTABELECER DIVERSAS CONVENÇÕES DE CHAMADA.

CONVENÇÃO DE CHAMADA:

CONVENÇÃO DE CHAMADA: SEQÜÊNCIA:SEQÜÊNCIA: LIMPEZA:LIMPEZA:

C:

C: DIREITA PARA ESQUERDADIREITA PARA ESQUERDA CHAMADORACHAMADORA

STDCALL:

STDCALL: DIREITA PARA ESQUERDADIREITA PARA ESQUERDA CHAMADACHAMADA

PASCAL:

(6)

PASSAGEM DE PARÂMETROS NA LINGUAGEM C

PASSAGEM DE PARÂMETROS NA LINGUAGEM C

s = MyFunc(x,y,z);

int MyFunc( int a, int b, int c) {

return a + b + c; }

mov eax, dword ptr [z] push eax

mov eax, dword ptr [y] push eax

mov eax, dword ptr [x] push eax

call _MyFunc

add esp, 12; limpeza mov dword ptr [s], eax

push ebp ; prólogo mov ebp, esp

mov eax, dword ptr [ebp+8] ; eax = a add eax, dword ptr [ebp+12]; eax += b add eax, dword ptr [ebp+16]; eax += c pop ebp ; epílogo ret esp (0) PILHA z esp (1) y esp (2) x esp (3) return address esp (4)

ebp old ebp esp (5)

ebp+4 ebp+8 ebp+12 ebp+16 STACK FRAME STACK FRAME STACK FRAME STACK FRAME

(7)

VARIÁVEIS LOCAIS NA LINGUAGEM C

VARIÁVEIS LOCAIS NA LINGUAGEM C

int MyFunc( int a, int b, int c) {

int var1,var2; var1 = a + b; var2 = c;

return var1 + var2; }

push ebp ; prólogo mov ebp, esp

sub esp, 8 ; var. locais mov eax, dword ptr [ebp+8] ; eax = a

add eax, dword ptr [ebp+12]; eax += b mov dword ptr [ebp-4], eax ; var1 = a+b mov eax, dword ptr [ebp+16]; eax = c mov dword ptr [ebp-8], eax ; var2 = c add eax, dword ptr [ebp] ; eax += var1 mov esp, ebp ; fim var loc pop ebp ; epílogo

ret esp (0) PILHA s = MyFunc(x,y,z); z esp (1) y esp (2) x esp (3) return address esp (4) old ebp esp (5) ebp ebp+4 ebp+8 ebp+12 ebp+16 ebp-4 ebp-8 var1 var2 esp (6)

OFFSETS POSITIVOS EM RELAÇÃO A EBP INDICAM PARÂMETROS

OFFSETS POSITIVOS EM RELAÇÃO A EBP INDICAM PARÂMETROS

OFFSETS NEGATIVOS EM RELAÇÃO A EBP INDICAM VARIÁVEIS LOCAIS OFFSETS NEGATIVOS EM RELAÇÃO A EBP INDICAM VARIÁVEIS LOCAIS

STACK FRAME STACK FRAMESTACK FRAME STACK FRAME

(8)

COMPARAÇÃO ENTRE CONVENÇÕES DE CHAMADA - SEQÜÊNCIA

COMPARAÇÃO ENTRE CONVENÇÕES DE CHAMADA - SEQÜÊNCIA

TRANSFERIR PARÂMETROS PARA A PILHA DA TRANSFERIR PARÂMETROS PARA A PILHA DA TRANSFERIR PARÂMETROS PARA A PILHA DA

TRANSFERIR PARÂMETROS PARA A PILHA DA DIREITA PARA A ESQUERDADIREITA PARA A ESQUERDADIREITA PARA A ESQUERDADIREITA PARA A ESQUERDA, OU SEJA,, OU SEJA,, OU SEJA,, OU SEJA, INICIANDO PELO ÚLTIMO, TEM A VANTAGEM QUE

INICIANDO PELO ÚLTIMO, TEM A VANTAGEM QUE INICIANDO PELO ÚLTIMO, TEM A VANTAGEM QUE

INICIANDO PELO ÚLTIMO, TEM A VANTAGEM QUE A POSIÇÃO RELATIVA DO PRIMEIROA POSIÇÃO RELATIVA DO PRIMEIROA POSIÇÃO RELATIVA DO PRIMEIROA POSIÇÃO RELATIVA DO PRIMEIRO PARÂMETRO NA PILHA SERÁ SEMPRE A MESMA

PARÂMETRO NA PILHA SERÁ SEMPRE A MESMA PARÂMETRO NA PILHA SERÁ SEMPRE A MESMA PARÂMETRO NA PILHA SERÁ SEMPRE A MESMA TRANSFERIR PARÂMETROS PARA A PILHA DA TRANSFERIR PARÂMETROS PARA A PILHA DA TRANSFERIR PARÂMETROS PARA A PILHA DA

TRANSFERIR PARÂMETROS PARA A PILHA DA DIREITA PARA A ESQUERDADIREITA PARA A ESQUERDADIREITA PARA A ESQUERDADIREITA PARA A ESQUERDA, OU SEJA,, OU SEJA,, OU SEJA,, OU SEJA, INICIANDO PELO ÚLTIMO, TEM A VANTAGEM QUE

INICIANDO PELO ÚLTIMO, TEM A VANTAGEM QUE INICIANDO PELO ÚLTIMO, TEM A VANTAGEM QUE

INICIANDO PELO ÚLTIMO, TEM A VANTAGEM QUE A POSIÇÃO RELATIVA DO PRIMEIROA POSIÇÃO RELATIVA DO PRIMEIROA POSIÇÃO RELATIVA DO PRIMEIROA POSIÇÃO RELATIVA DO PRIMEIRO PARÂMETRO NA PILHA SERÁ SEMPRE A MESMA

PARÂMETRO NA PILHA SERÁ SEMPRE A MESMA PARÂMETRO NA PILHA SERÁ SEMPRE A MESMA PARÂMETRO NA PILHA SERÁ SEMPRE A MESMA

NO EXEMPLO ANTERIOR, ISSO SIGNIFICA QUE O PRIMEIRO PARÂMETRO PODERÁ SER NO EXEMPLO ANTERIOR, ISSO SIGNIFICA QUE O PRIMEIRO PARÂMETRO PODERÁ SER NO EXEMPLO ANTERIOR, ISSO SIGNIFICA QUE O PRIMEIRO PARÂMETRO PODERÁ SER NO EXEMPLO ANTERIOR, ISSO SIGNIFICA QUE O PRIMEIRO PARÂMETRO PODERÁ SER ACESSADO SEMPRE NO OFFSET

ACESSADO SEMPRE NO OFFSET ACESSADO SEMPRE NO OFFSET

ACESSADO SEMPRE NO OFFSET [EBP+8][EBP+8][EBP+8][EBP+8], O SEGUNDO SEMPRE EM , O SEGUNDO SEMPRE EM , O SEGUNDO SEMPRE EM , O SEGUNDO SEMPRE EM [EBP+12][EBP+12][EBP+12][EBP+12], ETC., ETC., ETC., ETC. NO EXEMPLO ANTERIOR, ISSO SIGNIFICA QUE O PRIMEIRO PARÂMETRO PODERÁ SER NO EXEMPLO ANTERIOR, ISSO SIGNIFICA QUE O PRIMEIRO PARÂMETRO PODERÁ SER NO EXEMPLO ANTERIOR, ISSO SIGNIFICA QUE O PRIMEIRO PARÂMETRO PODERÁ SER NO EXEMPLO ANTERIOR, ISSO SIGNIFICA QUE O PRIMEIRO PARÂMETRO PODERÁ SER ACESSADO SEMPRE NO OFFSET

ACESSADO SEMPRE NO OFFSET ACESSADO SEMPRE NO OFFSET

ACESSADO SEMPRE NO OFFSET [EBP+8][EBP+8][EBP+8][EBP+8], O SEGUNDO SEMPRE EM , O SEGUNDO SEMPRE EM , O SEGUNDO SEMPRE EM , O SEGUNDO SEMPRE EM [EBP+12][EBP+12][EBP+12][EBP+12], ETC., ETC., ETC., ETC.

ISSO ISSO ISSO

ISSO PERMITE OPERAR COM UM NÚMERO VARIÁVEL DE PARÂMETROSPERMITE OPERAR COM UM NÚMERO VARIÁVEL DE PARÂMETROSPERMITE OPERAR COM UM NÚMERO VARIÁVEL DE PARÂMETROSPERMITE OPERAR COM UM NÚMERO VARIÁVEL DE PARÂMETROS PARA A PARA A PARA A PARA A MESMA ROTINA, UMA VEZ QUE OS PARÂMETROS ESTARÂO SEMPRE NAS MESMAS MESMA ROTINA, UMA VEZ QUE OS PARÂMETROS ESTARÂO SEMPRE NAS MESMAS MESMA ROTINA, UMA VEZ QUE OS PARÂMETROS ESTARÂO SEMPRE NAS MESMAS MESMA ROTINA, UMA VEZ QUE OS PARÂMETROS ESTARÂO SEMPRE NAS MESMAS POSIÇÕES RELATIVAS, INDEPENDENTEMENTE DE QUANTOS FOREM TRANSFERIDOS. POSIÇÕES RELATIVAS, INDEPENDENTEMENTE DE QUANTOS FOREM TRANSFERIDOS. POSIÇÕES RELATIVAS, INDEPENDENTEMENTE DE QUANTOS FOREM TRANSFERIDOS. POSIÇÕES RELATIVAS, INDEPENDENTEMENTE DE QUANTOS FOREM TRANSFERIDOS. ISSO

ISSO ISSO

ISSO PERMITE OPERAR COM UM NÚMERO VARIÁVEL DE PARÂMETROSPERMITE OPERAR COM UM NÚMERO VARIÁVEL DE PARÂMETROSPERMITE OPERAR COM UM NÚMERO VARIÁVEL DE PARÂMETROSPERMITE OPERAR COM UM NÚMERO VARIÁVEL DE PARÂMETROS PARA A PARA A PARA A PARA A MESMA ROTINA, UMA VEZ QUE OS PARÂMETROS ESTARÂO SEMPRE NAS MESMAS MESMA ROTINA, UMA VEZ QUE OS PARÂMETROS ESTARÂO SEMPRE NAS MESMAS MESMA ROTINA, UMA VEZ QUE OS PARÂMETROS ESTARÂO SEMPRE NAS MESMAS MESMA ROTINA, UMA VEZ QUE OS PARÂMETROS ESTARÂO SEMPRE NAS MESMAS POSIÇÕES RELATIVAS, INDEPENDENTEMENTE DE QUANTOS FOREM TRANSFERIDOS. POSIÇÕES RELATIVAS, INDEPENDENTEMENTE DE QUANTOS FOREM TRANSFERIDOS. POSIÇÕES RELATIVAS, INDEPENDENTEMENTE DE QUANTOS FOREM TRANSFERIDOS. POSIÇÕES RELATIVAS, INDEPENDENTEMENTE DE QUANTOS FOREM TRANSFERIDOS.

(9)

COMPARAÇÃO ENTRE CONVENÇÕES DE CHAMADA - LIMPEZA

COMPARAÇÃO ENTRE CONVENÇÕES DE CHAMADA - LIMPEZA

A RETIRADA DOS PARÂMETROS DA PILHA APÓS A EXECUÇÃO DA ROTINA CHAMADA, A RETIRADA DOS PARÂMETROS DA PILHA APÓS A EXECUÇÃO DA ROTINA CHAMADA, A RETIRADA DOS PARÂMETROS DA PILHA APÓS A EXECUÇÃO DA ROTINA CHAMADA, A RETIRADA DOS PARÂMETROS DA PILHA APÓS A EXECUÇÃO DA ROTINA CHAMADA, OU SEJA, A

OU SEJA, A OU SEJA, A

OU SEJA, A “LIMPEZA” DA PILHA“LIMPEZA” DA PILHA“LIMPEZA” DA PILHA“LIMPEZA” DA PILHA, PODE SER EXECUTADA TANTO PELA FUNÇÃO, PODE SER EXECUTADA TANTO PELA FUNÇÃO, PODE SER EXECUTADA TANTO PELA FUNÇÃO, PODE SER EXECUTADA TANTO PELA FUNÇÃO CHAMADA QUANTO PELA FUNÇÃO CHAMADORA.

CHAMADA QUANTO PELA FUNÇÃO CHAMADORA. CHAMADA QUANTO PELA FUNÇÃO CHAMADORA. CHAMADA QUANTO PELA FUNÇÃO CHAMADORA.

A RETIRADA DOS PARÂMETROS DA PILHA APÓS A EXECUÇÃO DA ROTINA CHAMADA, A RETIRADA DOS PARÂMETROS DA PILHA APÓS A EXECUÇÃO DA ROTINA CHAMADA, A RETIRADA DOS PARÂMETROS DA PILHA APÓS A EXECUÇÃO DA ROTINA CHAMADA, A RETIRADA DOS PARÂMETROS DA PILHA APÓS A EXECUÇÃO DA ROTINA CHAMADA, OU SEJA, A

OU SEJA, A OU SEJA, A

OU SEJA, A “LIMPEZA” DA PILHA“LIMPEZA” DA PILHA“LIMPEZA” DA PILHA“LIMPEZA” DA PILHA, PODE SER EXECUTADA TANTO PELA FUNÇÃO, PODE SER EXECUTADA TANTO PELA FUNÇÃO, PODE SER EXECUTADA TANTO PELA FUNÇÃO, PODE SER EXECUTADA TANTO PELA FUNÇÃO CHAMADA QUANTO PELA FUNÇÃO CHAMADORA.

CHAMADA QUANTO PELA FUNÇÃO CHAMADORA. CHAMADA QUANTO PELA FUNÇÃO CHAMADORA. CHAMADA QUANTO PELA FUNÇÃO CHAMADORA.

A EXECUÇÃO DA LIMPEZA PELA FUNÇÃO CHAMADORA TEM VANTAGENS E DESVAN-A EXECUÇÃO DDESVAN-A LIMPEZDESVAN-A PELDESVAN-A FUNÇÃO CHDESVAN-AMDESVAN-ADORDESVAN-A TEM VDESVAN-ANTDESVAN-AGENS E DESVDESVAN-AN-A EXECUÇÃO DA LIMPEZA PELA FUNÇÃO CHAMADORA TEM VANTAGENS E A EXECUÇÃO DA LIMPEZA PELA FUNÇÃO CHAMADORA TEM VANTAGENS E DESVAN- DESVAN-TAGENS EM RELAÇÃO À LIMPELA PELA FUNÇÃO CHAMADA:

TAGENS EM RELAÇÃO À LIMPELA PELA FUNÇÃO CHAMADA:TAGENS EM RELAÇÃO À LIMPELA PELA FUNÇÃO CHAMADA: TAGENS EM RELAÇÃO À LIMPELA PELA FUNÇÃO CHAMADA:

A EXECUÇÃO DA LIMPEZA PELA FUNÇÃO CHAMADORA TEM VANTAGENS E DESVAN-A EXECUÇÃO DDESVAN-A LIMPEZDESVAN-A PELDESVAN-A FUNÇÃO CHDESVAN-AMDESVAN-ADORDESVAN-A TEM VDESVAN-ANTDESVAN-AGENS E DESVDESVAN-AN-A EXECUÇÃO DA LIMPEZA PELA FUNÇÃO CHAMADORA TEM VANTAGENS E A EXECUÇÃO DA LIMPEZA PELA FUNÇÃO CHAMADORA TEM VANTAGENS E DESVAN- DESVAN-TAGENS EM RELAÇÃO À LIMPELA PELA FUNÇÃO CHAMADA:

TAGENS EM RELAÇÃO À LIMPELA PELA FUNÇÃO CHAMADA:TAGENS EM RELAÇÃO À LIMPELA PELA FUNÇÃO CHAMADA: TAGENS EM RELAÇÃO À LIMPELA PELA FUNÇÃO CHAMADA:

VANTAGEM: VANTAGEM: VANTAGEM: VANTAGEM:

PERMITE A OPERAÇÃO COM UM NÚMERO VARIÁVEL DE PARÂMETROS, POIS SOMEN-PERMITE A OPERAÇÃO COM UM NÚMERO VARIÁVEL DE PARÂMETROS, POIS SOMEN-PERMITE A OPERAÇÃO COM UM NÚMERO VARIÁVEL DE PARÂMETROS, POIS PERMITE A OPERAÇÃO COM UM NÚMERO VARIÁVEL DE PARÂMETROS, POIS SOMEN-TE A FUNÇÃO CHAMADORA SABE QUANTOS PARÂMETROS PASSOU E PORTANTO TE A FUNÇÃO CHAMADORA SABE QUANTOS PARÂMETROS PASSOU E PORTANTOTE A FUNÇÃO CHAMADORA SABE QUANTOS PARÂMETROS PASSOU E PORTANTO TE A FUNÇÃO CHAMADORA SABE QUANTOS PARÂMETROS PASSOU E PORTANTO QUANTOS DEVE RETIRAR DA PILHA.

QUANTOS DEVE RETIRAR DA PILHA.QUANTOS DEVE RETIRAR DA PILHA. QUANTOS DEVE RETIRAR DA PILHA.

VANTAGEM: VANTAGEM: VANTAGEM: VANTAGEM:

PERMITE A OPERAÇÃO COM UM NÚMERO VARIÁVEL DE PARÂMETROS, POIS SOMEN-PERMITE A OPERAÇÃO COM UM NÚMERO VARIÁVEL DE PARÂMETROS, POIS SOMEN-PERMITE A OPERAÇÃO COM UM NÚMERO VARIÁVEL DE PARÂMETROS, POIS PERMITE A OPERAÇÃO COM UM NÚMERO VARIÁVEL DE PARÂMETROS, POIS SOMEN-TE A FUNÇÃO CHAMADORA SABE QUANTOS PARÂMETROS PASSOU E PORTANTO TE A FUNÇÃO CHAMADORA SABE QUANTOS PARÂMETROS PASSOU E PORTANTOTE A FUNÇÃO CHAMADORA SABE QUANTOS PARÂMETROS PASSOU E PORTANTO TE A FUNÇÃO CHAMADORA SABE QUANTOS PARÂMETROS PASSOU E PORTANTO QUANTOS DEVE RETIRAR DA PILHA.

QUANTOS DEVE RETIRAR DA PILHA.QUANTOS DEVE RETIRAR DA PILHA. QUANTOS DEVE RETIRAR DA PILHA.

DESVANTAGEM: DESVANTAGEM: DESVANTAGEM: DESVANTAGEM:

O CÓDIGO DE LIMPEZA É DUPLICADO A CADA CHAMADA DA ROTINA. O CÓDIGO DE LIMPEZA É DUPLICADO A CADA CHAMADA DA ROTINA. O CÓDIGO DE LIMPEZA É DUPLICADO A CADA CHAMADA DA ROTINA. O CÓDIGO DE LIMPEZA É DUPLICADO A CADA CHAMADA DA ROTINA.

DESVANTAGEM: DESVANTAGEM: DESVANTAGEM: DESVANTAGEM:

O CÓDIGO DE LIMPEZA É DUPLICADO A CADA CHAMADA DA ROTINA. O CÓDIGO DE LIMPEZA É DUPLICADO A CADA CHAMADA DA ROTINA. O CÓDIGO DE LIMPEZA É DUPLICADO A CADA CHAMADA DA ROTINA. O CÓDIGO DE LIMPEZA É DUPLICADO A CADA CHAMADA DA ROTINA.

(10)

LIMPEZA DA PILHA PELA FUNÇÃO CHAMADA

LIMPEZA DA PILHA PELA FUNÇÃO CHAMADA

int __stdcall MyFunc( int a, int b, int c) {

int var1,var2; var1 = a + b; var2 = c;

return var1 + var2; }

push ebp ; prólogo -> salva stack frame anterior mov ebp, esp ; estabelece novo stack frame

sub esp, 8 ; cria 2 variáveis locais mov eax, dword ptr [ebp+8] ; eax = a

add eax, dword ptr [ebp+12]; eax += b mov dword ptr [ebp-4], eax ; var1 = a+b mov eax, dword ptr [ebp+16]; eax = c mov dword ptr [ebp-8], eax ; var2 = c add eax, dword ptr [ebp] ; eax += var1

mov esp, ebp ; epílogo -> destrói as variáveis locais pop ebp ; restaura stack frame anterior

ret 12 ; retorna e retira 3 parâmetros ; da pilha (3 x 4 = 12 bytes) CARACTERIZA CARACTERIZA CARACTERIZA CARACTERIZA CONVENÇÃO CONVENÇÃO CONVENÇÃO CONVENÇÃO DE CHAMADA DE CHAMADA DE CHAMADA DE CHAMADA STDCALL STDCALL STDCALL STDCALL LIMPEZA DA PILHA LIMPEZA DA PILHALIMPEZA DA PILHA LIMPEZA DA PILHA EXECUTADA PELA EXECUTADA PELAEXECUTADA PELA EXECUTADA PELA FUNÇÃO CHAMADA FUNÇÃO CHAMADAFUNÇÃO CHAMADA FUNÇÃO CHAMADA

(11)

ACESSO A STACK FRAME(S) DE FUNÇÕES CHAMADORAS

ACESSO A STACK FRAME(S) DE FUNÇÕES CHAMADORAS

NOS CENÁRIOS APRESENTADOS ATÉ AQUI, A NOS CENÁRIOS APRESENTADOS ATÉ AQUI, A NOS CENÁRIOS APRESENTADOS ATÉ AQUI, A

NOS CENÁRIOS APRESENTADOS ATÉ AQUI, A FUNÇÃO CHAMADAFUNÇÃO CHAMADAFUNÇÃO CHAMADA PODE TER ACESSOFUNÇÃO CHAMADA PODE TER ACESSO PODE TER ACESSO PODE TER ACESSO AO

AO AO

AO STACK FRAME DA FUNÇÃO CHAMADORASTACK FRAME DA FUNÇÃO CHAMADORASTACK FRAME DA FUNÇÃO CHAMADORA, UMA VEZ QUE O VALOR DOSTACK FRAME DA FUNÇÃO CHAMADORA, UMA VEZ QUE O VALOR DO, UMA VEZ QUE O VALOR DO, UMA VEZ QUE O VALOR DO REGISTRADOR

REGISTRADOR REGISTRADOR

REGISTRADOR EBPEBPEBPEBP DA FUNÇÃO CHAMADORA FOI SALVO NA PILHA E ESTÁ DA FUNÇÃO CHAMADORA FOI SALVO NA PILHA E ESTÁ DA FUNÇÃO CHAMADORA FOI SALVO NA PILHA E ESTÁ DA FUNÇÃO CHAMADORA FOI SALVO NA PILHA E ESTÁ DISPONÍVEL NO OFFSET

DISPONÍVEL NO OFFSET DISPONÍVEL NO OFFSET

DISPONÍVEL NO OFFSET [EBP] [EBP] [EBP] (EBP APONTA PARRA “OLD EBP”).[EBP] (EBP APONTA PARRA “OLD EBP”). (EBP APONTA PARRA “OLD EBP”). (EBP APONTA PARRA “OLD EBP”). NOS CENÁRIOS APRESENTADOS ATÉ AQUI, A

NOS CENÁRIOS APRESENTADOS ATÉ AQUI, A NOS CENÁRIOS APRESENTADOS ATÉ AQUI, A

NOS CENÁRIOS APRESENTADOS ATÉ AQUI, A FUNÇÃO CHAMADAFUNÇÃO CHAMADAFUNÇÃO CHAMADAFUNÇÃO CHAMADA PODE TER ACESSO PODE TER ACESSO PODE TER ACESSO PODE TER ACESSO AO

AO AO

AO STACK FRAME DA FUNÇÃO CHAMADORASTACK FRAME DA FUNÇÃO CHAMADORASTACK FRAME DA FUNÇÃO CHAMADORASTACK FRAME DA FUNÇÃO CHAMADORA, UMA VEZ QUE O VALOR DO, UMA VEZ QUE O VALOR DO, UMA VEZ QUE O VALOR DO, UMA VEZ QUE O VALOR DO REGISTRADOR

REGISTRADOR REGISTRADOR

REGISTRADOR EBPEBPEBPEBP DA FUNÇÃO CHAMADORA FOI SALVO NA PILHA E ESTÁ DA FUNÇÃO CHAMADORA FOI SALVO NA PILHA E ESTÁ DA FUNÇÃO CHAMADORA FOI SALVO NA PILHA E ESTÁ DA FUNÇÃO CHAMADORA FOI SALVO NA PILHA E ESTÁ DISPONÍVEL NO OFFSET

DISPONÍVEL NO OFFSET DISPONÍVEL NO OFFSET

DISPONÍVEL NO OFFSET [EBP] [EBP] [EBP] (EBP APONTA PARRA “OLD EBP”).[EBP] (EBP APONTA PARRA “OLD EBP”). (EBP APONTA PARRA “OLD EBP”). (EBP APONTA PARRA “OLD EBP”).

ASSIM, UMA FUNÇÃO CHAMADA PODE, EM TEORIA, ACESSAR RECURSIVAMENTE ASSIM, UMA FUNÇÃO CHAMADA PODE, EM TEORIA, ACESSAR RECURSIVAMENTE ASSIM, UMA FUNÇÃO CHAMADA PODE, EM TEORIA, ACESSAR RECURSIVAMENTE ASSIM, UMA FUNÇÃO CHAMADA PODE, EM TEORIA, ACESSAR RECURSIVAMENTE TODAS AS VARIÁVEIS LOCAIS E PARÂMETROS DE TODA A CADEIA DE FUNÇÕES TODAS AS VARIÁVEIS LOCAIS E PARÂMETROS DE TODA A CADEIA DE FUNÇÕES TODAS AS VARIÁVEIS LOCAIS E PARÂMETROS DE TODA A CADEIA DE FUNÇÕES TODAS AS VARIÁVEIS LOCAIS E PARÂMETROS DE TODA A CADEIA DE FUNÇÕES CHAMADORAS QUE A PRECEDERAM.

CHAMADORAS QUE A PRECEDERAM. CHAMADORAS QUE A PRECEDERAM. CHAMADORAS QUE A PRECEDERAM.

ASSIM, UMA FUNÇÃO CHAMADA PODE, EM TEORIA, ACESSAR RECURSIVAMENTE ASSIM, UMA FUNÇÃO CHAMADA PODE, EM TEORIA, ACESSAR RECURSIVAMENTE ASSIM, UMA FUNÇÃO CHAMADA PODE, EM TEORIA, ACESSAR RECURSIVAMENTE ASSIM, UMA FUNÇÃO CHAMADA PODE, EM TEORIA, ACESSAR RECURSIVAMENTE TODAS AS VARIÁVEIS LOCAIS E PARÂMETROS DE TODA A CADEIA DE FUNÇÕES TODAS AS VARIÁVEIS LOCAIS E PARÂMETROS DE TODA A CADEIA DE FUNÇÕES TODAS AS VARIÁVEIS LOCAIS E PARÂMETROS DE TODA A CADEIA DE FUNÇÕES TODAS AS VARIÁVEIS LOCAIS E PARÂMETROS DE TODA A CADEIA DE FUNÇÕES CHAMADORAS QUE A PRECEDERAM.

CHAMADORAS QUE A PRECEDERAM. CHAMADORAS QUE A PRECEDERAM. CHAMADORAS QUE A PRECEDERAM.

ESSA CAPACIDADE ESSA CAPACIDADE ESSA CAPACIDADE

ESSA CAPACIDADE NÃO É UTILIZADA PELA LINGUAGEM CNÃO É UTILIZADA PELA LINGUAGEM CNÃO É UTILIZADA PELA LINGUAGEM CNÃO É UTILIZADA PELA LINGUAGEM C, NA QUAL OS, NA QUAL OS, NA QUAL OS, NA QUAL OS PARÂMETROS E VARIÁVEIS LOCAIS

PARÂMETROS E VARIÁVEIS LOCAIS PARÂMETROS E VARIÁVEIS LOCAIS

PARÂMETROS E VARIÁVEIS LOCAIS DA FUNÇAO CHAMADORA DA FUNÇAO CHAMADORA DA FUNÇAO CHAMADORA DA FUNÇAO CHAMADORA NÃO SÃO VISÍVEISNÃO SÃO VISÍVEISNÃO SÃO VISÍVEISNÃO SÃO VISÍVEIS A A A A UMA FUNÇÃO CHAMADA. NA LINGUAGEM C UMA FUNÇÃO CHAMADA ACESSA UMA FUNÇÃO CHAMADA. NA LINGUAGEM C UMA FUNÇÃO CHAMADA ACESSA UMA FUNÇÃO CHAMADA. NA LINGUAGEM C UMA FUNÇÃO CHAMADA ACESSA UMA FUNÇÃO CHAMADA. NA LINGUAGEM C UMA FUNÇÃO CHAMADA ACESSA APENAS SEU PRÓPRIO STACK FRAME.

APENAS SEU PRÓPRIO STACK FRAME. APENAS SEU PRÓPRIO STACK FRAME. APENAS SEU PRÓPRIO STACK FRAME. ESSA CAPACIDADE

ESSA CAPACIDADE ESSA CAPACIDADE

ESSA CAPACIDADE NÃO É UTILIZADA PELA LINGUAGEM CNÃO É UTILIZADA PELA LINGUAGEM CNÃO É UTILIZADA PELA LINGUAGEM C, NA QUAL OSNÃO É UTILIZADA PELA LINGUAGEM C, NA QUAL OS, NA QUAL OS, NA QUAL OS PARÂMETROS E VARIÁVEIS LOCAIS

PARÂMETROS E VARIÁVEIS LOCAIS PARÂMETROS E VARIÁVEIS LOCAIS

PARÂMETROS E VARIÁVEIS LOCAIS DA FUNÇAO CHAMADORA DA FUNÇAO CHAMADORA DA FUNÇAO CHAMADORA DA FUNÇAO CHAMADORA NÃO SÃO VISÍVEISNÃO SÃO VISÍVEISNÃO SÃO VISÍVEIS ANÃO SÃO VISÍVEIS A A A UMA FUNÇÃO CHAMADA. NA LINGUAGEM C UMA FUNÇÃO CHAMADA ACESSA UMA FUNÇÃO CHAMADA. NA LINGUAGEM C UMA FUNÇÃO CHAMADA ACESSA UMA FUNÇÃO CHAMADA. NA LINGUAGEM C UMA FUNÇÃO CHAMADA ACESSA UMA FUNÇÃO CHAMADA. NA LINGUAGEM C UMA FUNÇÃO CHAMADA ACESSA APENAS SEU PRÓPRIO STACK FRAME.

APENAS SEU PRÓPRIO STACK FRAME. APENAS SEU PRÓPRIO STACK FRAME. APENAS SEU PRÓPRIO STACK FRAME.

A ARQUITETURA IA-32 PREVÊ AS INSTRUÇÕES A ARQUITETURA IA-32 PREVÊ AS INSTRUÇÕES A ARQUITETURA IA-32 PREVÊ AS INSTRUÇÕES

A ARQUITETURA IA-32 PREVÊ AS INSTRUÇÕES ENTERENTERENTERENTER E E E LEAVE E LEAVELEAVE, QUE PERMITEMLEAVE, QUE PERMITEM, QUE PERMITEM, QUE PERMITEM ESTABELECER

ESTABELECER ESTABELECER

ESTABELECER E E E E DESTRUIRDESTRUIRDESTRUIRDESTRUIR DE FORMA EFICIENTE UM DE FORMA EFICIENTE UM DE FORMA EFICIENTE UM DE FORMA EFICIENTE UM STACKFRAMESTACKFRAMESTACKFRAMESTACKFRAME, INCLUSIVE, INCLUSIVE, INCLUSIVE, INCLUSIVE ARMAZENANDO VALORES DE EBP DE FRAMES ANTERIORES, SE NECESSÁRIO. ARMAZENANDO VALORES DE EBP DE FRAMES ANTERIORES, SE NECESSÁRIO. ARMAZENANDO VALORES DE EBP DE FRAMES ANTERIORES, SE NECESSÁRIO. ARMAZENANDO VALORES DE EBP DE FRAMES ANTERIORES, SE NECESSÁRIO. A ARQUITETURA IA-32 PREVÊ AS INSTRUÇÕES

A ARQUITETURA IA-32 PREVÊ AS INSTRUÇÕES A ARQUITETURA IA-32 PREVÊ AS INSTRUÇÕES

A ARQUITETURA IA-32 PREVÊ AS INSTRUÇÕES ENTERENTERENTERENTER E E E E LEAVELEAVELEAVELEAVE, QUE PERMITEM, QUE PERMITEM, QUE PERMITEM, QUE PERMITEM ESTABELECER

ESTABELECER ESTABELECER

ESTABELECER E E E E DESTRUIRDESTRUIRDESTRUIRDESTRUIR DE FORMA EFICIENTE UM DE FORMA EFICIENTE UM DE FORMA EFICIENTE UM DE FORMA EFICIENTE UM STACKFRAMESTACKFRAMESTACKFRAMESTACKFRAME, INCLUSIVE, INCLUSIVE, INCLUSIVE, INCLUSIVE ARMAZENANDO VALORES DE EBP DE FRAMES ANTERIORES, SE NECESSÁRIO. ARMAZENANDO VALORES DE EBP DE FRAMES ANTERIORES, SE NECESSÁRIO. ARMAZENANDO VALORES DE EBP DE FRAMES ANTERIORES, SE NECESSÁRIO. ARMAZENANDO VALORES DE EBP DE FRAMES ANTERIORES, SE NECESSÁRIO.

(12)

STACK FRAMES UTILIZANDO LEAVE E ENTER

STACK FRAMES UTILIZANDO LEAVE E ENTER

int __stdcall MyFunc( int a, int b, int c) {

int var1,var2; var1 = a + b; var2 = c;

return var1 + var2; }

enter 8 , 0 ; prólogo -> salva stack frame anterior, ; estabelece novo stack frame e cria 2 ; variáveis locais

mov eax, dword ptr [ebp+8] ; eax = a add eax, dword ptr [ebp+12]; eax += b mov dword ptr [ebp-4], eax ; var1 = a+b mov eax, dword ptr [ebp+16]; eax = c mov dword ptr [ebp-8], eax ; var2 = c add eax, dword ptr [ebp] ; eax += var1

leave ; epílogo -> destrói as variáveis locais ; restaura stack frame anterior

ret 12 ; retorna e retira 3 parâmetros ; da pilha (3 x 4 = 12 bytes) CARACTERIZA CARACTERIZACARACTERIZA CARACTERIZA CONVENÇÃO CONVENÇÃOCONVENÇÃO CONVENÇÃO DE CHAMADA DE CHAMADADE CHAMADA DE CHAMADA STDCALL STDCALLSTDCALL STDCALL LIMPEZA DA PILHA LIMPEZA DA PILHALIMPEZA DA PILHA LIMPEZA DA PILHA EXECUTADA PELA EXECUTADA PELAEXECUTADA PELA EXECUTADA PELA FUNÇÃO CHAMADA FUNÇÃO CHAMADAFUNÇÃO CHAMADA FUNÇÃO CHAMADA NÍVEL ZERO DE NÍVEL ZERO DE NÍVEL ZERO DE NÍVEL ZERO DE ANINHAMENTO - NÃO ANINHAMENTO - NÃO ANINHAMENTO - NÃO ANINHAMENTO - NÃO COPIA EBP ANTERIORES COPIA EBP ANTERIORES COPIA EBP ANTERIORES COPIA EBP ANTERIORES

ESPAÇO PARA DUAS ESPAÇO PARA DUAS ESPAÇO PARA DUAS ESPAÇO PARA DUAS VARIÁVEIS LOCAIS VARIÁVEIS LOCAIS VARIÁVEIS LOCAIS VARIÁVEIS LOCAIS (8 BYTES) (8 BYTES) (8 BYTES) (8 BYTES)

Referências

Documentos relacionados

De facto, nou- tras abordagens historiográficas sobre este líder republicano, a passagem por Moçambique, no contexto dos últimos anos da República, é pouco considerada, apesar

Grabando los valores de la presiòn sanguìnea y teniendo en cuenta el tiempo de mediciòn y las condiciones de vida diarias, es posible conocer los cambios de la presiòn sanguìnea

Feitiço do Segredo: deposita um segredo numa pessoa de confiança, essa pessoa fica deposita um segredo numa pessoa de confiança, essa pessoa fica sendo o "Fiel do sendo o

Ao rever todas as análises e discussões que realizamos neste trabalho, embasadas nos preceitos funcionalistas aplicados à tradução e nos paradigmas bakhtinianos,

Reconhecimento de face utilizando banco de imagens monocromáticas e coloridas através dos métodos da análise do componente principal (PCA) e da Rede Neural Artificial (RNA)

c.4) Não ocorrerá o cancelamento do contrato de seguro cujo prêmio tenha sido pago a vista, mediante financiamento obtido junto a instituições financeiras, no

- Remover as pastilhas usadas e retornar todo o parafuso de regulagem em seguida montar uma pastilha nova do lado da roda, empurrando com a mão a pinça no sentido do cilindro de

A respeito das propostas de desregulamentação nas relações de trabalho e da seguridade social no Brasil, percebidas tanto nas defesas do Banco Mundial quanto nas