如何解决这在汇编中是什么意思
这是一个示例c代码,在mac os中用gcc编译
这是代码
int main(int argc,char *argv[])
{
char key[] = "key-123";
if(argc == 2){
printf("Checking key ... %s\n",argv[1]);
if (strcmp(argv[1],key) == 0) {
printf("Access Granted");
} else {
printf("Denied");
}
}
else{
printf("insert the key");
}
return 0;
}
解决方法
这是用于移动到 %rax
的值。它计算为 %rip
的偏移量,这是已知的,因此反汇编程序可以向您显示该值。这里的主要微妙之处在于 %rip
包含后续指令的地址。所以你有 %rip = 0x100003e7f
,指令添加 0x181
所以你得到 0x100003e7f + 0x181 = 0x100004000
,这是你看到的值。
这是 key
字符串的地址,它将被接下来的 2 条指令移入堆栈
编辑:我不太确定这是如何生成的,所以我从 asm 假设它正在加载密钥。但彼得提到它是在 MacOS 上。所以它是堆栈保护器金丝雀(似乎)。尽管注释是移至 %rax
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。