⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8.html

📁 网上一个牛人整理的关于linux内核编译
💻 HTML
📖 第 1 页 / 共 5 页
字号:
&nbsp;&nbsp;&nbsp; this option increases both compilation time and the performance of<br>
&nbsp;&nbsp;&nbsp; the generated code.<br>
[alert7@redhat62 alert7]$ gcc -O2 -o test test.c<br>
[alert7@redhat62 alert7]$ wc -c test<br>
&nbsp; 11757 test<br>
[alert7@redhat62 alert7]$ gdb -q test<br>
(gdb) disass main<br>
Dump of assembler code for function main:<br>
0x80483d8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %ebp<br>
0x80483d9 :&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %esp,%ebp<br>
0x80483db :&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x80483c8<br>
0x80483e0 :&nbsp;&nbsp;&nbsp;&nbsp; xor&nbsp;&nbsp;&nbsp; %eax,%eax<br>
0x80483e2 :&nbsp;&nbsp;&nbsp; leave<br>
0x80483e3 :&nbsp;&nbsp;&nbsp; ret<br>
...<br>
0x80483ef :&nbsp;&nbsp;&nbsp; nop<br>
End of assembler dump.<br>
(gdb) disass hi<br>
Dump of assembler code for function hi:<br>
0x80483c8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %ebp<br>
0x80483c9 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %esp,%ebp<br>
0x80483cb :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; $0x8048440<br>
0x80483d0 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x8048308<br>
0x80483d5 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leave<br>
0x80483d6 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret<br>
0x80483d7 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nop<br>
End of assembler dump.<br>
由于程序比较简单,再优化也没有好优化的了,所以跟-O出来的一样。<p>
<br>



<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I202" ID="I202"></A><center><b><font size=+2>-fomit-frame-pointer 编译选项</font></b></center><br>
★ -fomit-frame-pointer 编译选项<br>
-fomit-frame-pointer<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Don't keep the frame pointer in a register for functions<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that don't need one.&nbsp; This avoids the&nbsp; instructions to save,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set up and restore frame pointers; it also makes an extra<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; register available in many functions.&nbsp; It also makes<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debugging impossible on most machines.<p>
&nbsp;&nbsp;&nbsp; 忽略帧指针。这样在程序就不需要保存,安装,和恢复ebp了。这样ebp也就是一个free的register了,在函数中就可以随便使用了。<p>
[alert7@redhat62 alert7]$ gcc -fomit-frame-pointer -o test test.c<br>
[alert7@redhat62 alert7]$ wc -c test<br>
&nbsp; 11773 test<br>
[alert7@redhat62 alert7]$ gdb -q test<br>
(gdb) disass main<br>
Dump of assembler code for function main:<br>
0x80483e0 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x80483d0<br>
0x80483e5 :&nbsp;&nbsp;&nbsp;&nbsp; xor&nbsp;&nbsp;&nbsp; %eax,%eax<br>
0x80483e7 :&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp; 0x80483f0<br>
0x80483e9 :&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp; 0x0(%esi,1),%esi<br>
0x80483f0 :&nbsp;&nbsp;&nbsp; ret<br>
....<br>
End of assembler dump.<br>
(gdb) disass hi<br>
Dump of assembler code for function hi:<br>
0x80483d0 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; $0x8048450<br>
0x80483d5 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x8048308<br>
0x80483da :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp; $0x4,%esp<br>
0x80483dd :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret<br>
0x80483de :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %esi,%esi<br>
End of assembler dump.<br>
在main()和hi()中都去掉了以下指令<br>
push&nbsp;&nbsp; %ebp<br>
mov&nbsp;&nbsp;&nbsp; %esp,%ebp//这两条指令安装<br>
leave//这条指令恢复<br>
来看看部分的内存映象<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (内存高址)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |bffffbc4| argv的地址(即argv[0]的地址)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb84 +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |00000001| argc的值<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb80 +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |400309cb|main的返回地址<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb7c +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |080483e5| hi()的返回地址<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb78 +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |08048450|&nbsp; &quot;hi&quot;字符串的地址<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb74 +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | ...... |<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (内存低址)<br>
没有保存上层执行环境的ebp.<p>
<p>



<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I203" ID="I203"></A><center><b><font size=+2>-fomit-frame-pointer &amp;&amp; -O2</font></b></center><br>

★ -fomit-frame-pointer &amp;&amp; -O2<br>
-fomit-frame-pointer编译选项去掉了<br>
push&nbsp;&nbsp; %ebp<br>
mov&nbsp;&nbsp;&nbsp; %esp,%ebp//这两条指令安装<br>
leave//这条指令恢复<br>
-O2编译选项去掉了<br>
add&nbsp;&nbsp;&nbsp; $0x4,%esp<br>
两个加起来会不会这四条指令一起去掉,从而使stack不平衡呢?<br>
[alert7@redhat62 alert7]$ gcc -fomit-frame-pointer -O2 -o test test.c<br>
[alert7@redhat62 alert7]$ wc -c test<br>
&nbsp; 11741 test<br>
[alert7@redhat62 alert7]$ gdb -q test<br>
(gdb) disass main<br>
Dump of assembler code for function main:<br>
0x80483d8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x80483c8<br>
0x80483dd :&nbsp;&nbsp;&nbsp;&nbsp; xor&nbsp;&nbsp;&nbsp; %eax,%eax<br>
0x80483df :&nbsp;&nbsp;&nbsp;&nbsp; ret<br>
End of assembler dump.<br>
(gdb) disass hi<br>
Dump of assembler code for function hi:<br>
0x80483c8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; $0x8048430<br>
0x80483cd :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x8048308<br>
0x80483d2 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp; $0x4,%esp<br>
0x80483d5 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret<br>
0x80483d6 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %esi,%esi<br>
End of assembler dump.<br>
来看看部分的内存映象<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (内存高址)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |bffffbc4| argv的地址(即argv[0]的地址)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb84 +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |00000001| argc的值<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb80 +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |400309cb|main的返回地址<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb7c +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |080483dd| hi()的返回地址<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb78 +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |08048430|&nbsp; &quot;hi&quot;字符串的地址<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xbffffb74 +--------+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | ...... |<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (内存低址)<br>
此时就没有把add&nbsp;&nbsp;&nbsp; $0x4,%esp优化掉,如果优化掉的话,整个stack就<br>
会变的不平衡,从而会导致程序出错。<p>
<p>



<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I204" ID="I204"></A><center><b><font size=+2>-fPIC 编译选项</font></b></center><br>
★ -fPIC 编译选项<br>
-fPIC&nbsp;&nbsp;&nbsp; If&nbsp; supported for the target machine, emit position-independent<br>
&nbsp;&nbsp;&nbsp; code, suitable for dynamic linking,even if branches need large<br>
&nbsp;&nbsp;&nbsp; displacements.<p>
&nbsp;&nbsp;&nbsp; 产生位置无关代码(PIC),一般创建共享库时用到。<br>
&nbsp;&nbsp;&nbsp; 在x86上,PIC的代码的符号引用都是通过ebx进行操作的。<p>
[alert7@redhat62 alert7]$ gcc -fPIC -o test test.c<br>
[alert7@redhat62 alert7]$ wc -c test<br>
&nbsp; 11805 test<br>
[alert7@redhat62 alert7]$ gdb -q test<br>
(gdb) disass main<br>
Dump of assembler code for function main:<br>
0x80483f8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %ebp<br>
0x80483f9 :&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %esp,%ebp<br>
0x80483fb :&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %ebx<br>
0x80483fc :&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x8048401<br>
0x8048401 :&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp; %ebx//取得该指令的地址<br>
0x8048402 :&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp; $0x1093,%ebx//此时ebx里面存放着是GOT表的地址<br>
0x8048408 :&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x80483d0<br>
0x804840d :&nbsp;&nbsp;&nbsp; xor&nbsp;&nbsp;&nbsp; %eax,%eax<br>
0x804840f :&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp; 0x8048411<br>
0x8048411 :&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; 0xfffffffc(%ebp),%ebx<br>
0x8048414 :&nbsp;&nbsp;&nbsp; leave<br>
0x8048415 :&nbsp;&nbsp;&nbsp; ret<br>
...<br>
End of assembler dump.<br>
(gdb) disass hi<br>
Dump of assembler code for function hi:<br>
0x80483d0 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %ebp<br>
0x80483d1 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %esp,%ebp<br>
0x80483d3 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %ebx<br>
0x80483d4 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x80483d9<br>
0x80483d9 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp; %ebx<br>
0x80483da :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp; $0x10bb,%ebx<br>
0x80483e0 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp; 0xffffefdc(%ebx),%edx<br>
0x80483e6 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %edx,%eax<br>
0x80483e8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %eax<br>
0x80483e9 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; 0x8048308<br>
0x80483ee :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp; $0x4,%esp<br>
0x80483f1 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; 0xfffffffc(%ebp),%ebx<br>
0x80483f4 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leave<br>
0x80483f5 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -