SpaceHoll0w Posted January 25, 2022 at 06:29 PM Share Posted January 25, 2022 at 06:29 PM instruções como: .cfi_def_cfa 1, 0 oque elas fazem? por que esse 1, 0? poderia me mostrar algum material para entender? (muito obg pela ajuda!!!) Quote Link to comment Share on other sites More sharing options...
Felipe.Silva Posted January 26, 2022 at 01:41 AM Share Posted January 26, 2022 at 01:41 AM Essas diretivas CFI (Call Frame Information) geram informações que são usadas pelo depurador de código. A sigla CFA é de Canonical Frame Address que seria o endereço do stack pointer antes de entrar na função atual. A diretiva `.cfi_def_cfa` é usada para definir o valor do CFA. O primeiro parâmetro é um número que identifica um registrador e o segundo um valor numérico sinalizado (offset). O valor do CFA é definido como o valor desse registrador somado ao offset no segundo parâmetro. No caso o número 1 identifica o registrador EAX/RAX, o que não faz muito sentido ao meu ver. Essa diretiva foi tirada de um código real? Um exemplo real que peguei aqui foi: .cfi_def_cfa 7, 8 Onde o 7 é o registrador RSP. Então essa diretiva está gerando informação para dizer para o depurador: "Nesse exato momento o CFA é RSP+8" Você pode desabilitar essas diretivas com a flag -fno-asynchronous-unwind-tables, daí o código fica mais legível. Exemplo: $ gcc exemplo.c -o exemplo.s -S -fno-asynchronous-unwind-tables Referências 7.12 CFI directives - AS documentations CFI directives in assembly files - ImperialViolet Quote Link to comment Share on other sites More sharing options...
SpaceHoll0w Posted January 26, 2022 at 07:04 PM Author Share Posted January 26, 2022 at 07:04 PM (edited) 17 horas atrás, Felipe.Silva disse: Essas diretivas CFI (Call Frame Information) geram informações que são usadas pelo depurador de código. A sigla CFA é de Canonical Frame Address que seria o endereço do stack pointer antes de entrar na função atual. A diretiva `.cfi_def_cfa` é usada para definir o valor do CFA. O primeiro parâmetro é um número que identifica um registrador e o segundo um valor numérico sinalizado (offset). O valor do CFA é definido como o valor desse registrador somado ao offset no segundo parâmetro. No caso o número 1 identifica o registrador EAX/RAX, o que não faz muito sentido ao meu ver. Essa diretiva foi tirada de um código real? Um exemplo real que peguei aqui foi: .cfi_def_cfa 7, 8 Onde o 7 é o registrador RSP. Então essa diretiva está gerando informação para dizer para o depurador: "Nesse exato momento o CFA é RSP+8" Você pode desabilitar essas diretivas com a flag -fno-asynchronous-unwind-tables, daí o código fica mais legível. Exemplo: $ gcc exemplo.c -o exemplo.s -S -fno-asynchronous-unwind-tables Referências 7.12 CFI directives - AS documentations CFI directives in assembly files - ImperialViolet "No caso o número 1 identifica o registrador EAX/RAX, o que não faz muito sentido ao meu ver", sim foi tirado de um codigo de verdade, acredite, olhe... (muito obrigado pela resposta amigo) Edited January 26, 2022 at 07:08 PM by SpaceHoll0w Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.