Assembly 当溢出时,移动%rbx,%rsi做什么?
这是我的函数的汇编代码。 这是在gcc-O2-fsanitize=未定义的情况下运行的Assembly 当溢出时,移动%rbx,%rsi做什么?,assembly,optimization,x86-64,Assembly,Optimization,X86 64,这是我的函数的汇编代码。 这是在gcc-O2-fsanitize=未定义的情况下运行的 0: 55 push %rbp 1: 53 push %rbx 2: 48 ba ff ff ff ff ff movabs $0x7fffffffffffffff,%rdx 9: ff ff 7f c: 48 83 ec 08 sub
0: 55 push %rbp
1: 53 push %rbx
2: 48 ba ff ff ff ff ff movabs $0x7fffffffffffffff,%rdx
9: ff ff 7f
c: 48 83 ec 08 sub $0x8,%rsp
10: 48 8b 1d 00 00 00 00 mov 0x0(%rip),%rbx # 17 <testovf+0x17>
17: 48 89 dd mov %rbx,%rbp
1a: 48 01 d5 add %rdx,%rbp
1d: 70 0d jo 2c <testovf+0x2c>
1f: 48 39 eb cmp %rbp,%rbx
22: 0f 9f c0 setg %al
25: 48 83 c4 08 add $0x8,%rsp
29: 5b pop %rbx
2a: 5d pop %rbp
2b: c3 retq
2c: 48 89 de mov %rbx,%rsi
2f: bf 00 00 00 00 mov $0x0,%edi
34: e8 00 00 00 00 callq 39 <testovf+0x39>
39: eb e4 jmp 1f <testovf+0x1f>
0:55推送%rbp
1:53推送%rbx
2:48 ba ff ff ff movabs$0x7fffffffffffffff,%rdx
9:ff 7f
c:48 83 ec 08分$0x8,%rsp
10:48 8b 1d 00 mov 0x0(%rip),%rbx#17
17:48 89日折旧率变动%rbx,%rbp
1a:48 01 d5添加%rdx,%rbp
1d:70 0d jo 2c
1f:48 39 eb cmp%rbp%rbx
22:0f 9f c0设定值%al
25:48 83 c4 08添加$0x8,%rsp
29:50亿波普%rbx
2a:5d pop%rbp
2b:c3-retq
2c:48 89移动百分比rbx,%rsi
2f:bf 00 mov$0x0,%edi
34:e8 00 00 callq 39
39:eb e4 jmp 1f
我知道当1a发生溢出时,它会跳到2c。
然而,在2c之后,mov%rbx、%rsi和mov$0x0、%edi做什么?
他们需要在那里吗?在地址
34
您有一个callq
到外部函数。您询问的两条指令设置该函数的参数,根据标准的64位调用约定,这些参数在寄存器rdi
和rsi
中传递
请注意,调用的目标显示为
39
,但这并不正确。机会是,您从objdump获得此列表,但忘记使用将显示重定位条目的-r
选项。当我使用-r选项时,添加到代码中的内容只有:30:r\u X86\u 64\u 32。data+0x20 34:e8 00 00 callq 39 35:r\u X86\u 64\u PC32__ubsan\u handle\u add\u overflow-0x4 39:eb e4 jmp 1f您知道它的意思吗?是的,它向您显示了调用的函数实际上是\u ubsan\u handle\u add\u overflow
。Tony,停止编辑问题的主体。没有代码,这是一个不完整和无用的问题,应该删除。如果要进行编辑,请同时输入新内容。如果您有不同的问题,请发布新问题