我是Swift的新手并试图弄清楚Optional的概念.我在Playground中有一小段代码,它给了我"条件中的变量绑定需要初始化程序"错误.有人可以解释为什么以及如何解决它?
我只想打印"是"或"否",具体取决于"score1"是否有值.这是代码:
import Cocoa
class Person {
var score1: Int? = 9
func sum() {
if let score1 {
print("yes")
} else {
print("No")
}
}//end sum
}// end person
var objperson = person()
objperson.sum()
Run Code Online (Sandbox Code Playgroud) 为什么要剥离二进制显示_cxa_finalize而不是libc_start_main?
我正在尝试main()在Linux(Ubuntu)上的一个非常简单的C程序中查找和反汇编。二进制文件被剥离。在下面,您可以看到相同说明的拆卸(未剥离)与拆卸(剥离)。
问题:_cxa_finalize剥离版本中包含什么?为什么libc_start_main被替换_cxa_finalize?
不剥离:
106d: 48 8d 3d c1 00 00 00 lea rdi,[rip+0xc1] # 1135 <main>
1074: ff 15 66 2f 00 00 call QWORD PTR [rip+0x2f66] # 3fe0 <__libc_start_main@GLIBC_2.2.5>
Run Code Online (Sandbox Code Playgroud)
剥离:
106d: 48 8d 3d c1 00 00 00 lea rdi,[rip+0xc1] # 1135 <__cxa_finalize@plt+0xf5>
1074: ff 15 66 2f 00 00 call QWORD PTR [rip+0x2f66] # 3fe0 <__cxa_finalize@plt+0x2fa0>
Run Code Online (Sandbox Code Playgroud) 我试图理解对main()inside的调用__libc_start_main()。我知道 的参数之一__libc_start_main()是 的地址main()。但是,我无法弄清楚 main() 是如何在内部调用的,__libc_start_main()因为没有操作码CALL或JMP. 在执行跳转到main().
0x7ffff7ded08b <__libc_start_main+203>: lea rax,[rsp+0x20]
0x7ffff7ded090 <__libc_start_main+208>: mov QWORD PTR fs:0x300,rax
=> 0x7ffff7ded099 <__libc_start_main+217>: mov rax,QWORD PTR [rip+0x1c3e10] # 0x7ffff7fb0eb0
Run Code Online (Sandbox Code Playgroud)
我"Hello, World!!"用 C写了一个简单的。在上面的程序集中:
main()地址处的指令之后0x7ffff7ded099。MOV(到RAX)指令导致跳转到main()?