SpaceHoll0w Postado Janeiro 25, 2022 em 18:29 Compartilhar Postado Janeiro 25, 2022 em 18:29 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!!!) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Felipe.Silva Postado Janeiro 26, 2022 em 01:41 Compartilhar Postado Janeiro 26, 2022 em 01:41 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
SpaceHoll0w Postado Janeiro 26, 2022 em 19:04 Autor Compartilhar Postado Janeiro 26, 2022 em 19:04 (editado) 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) Editado Janeiro 26, 2022 em 19:08 por SpaceHoll0w Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.