精华内容
下载资源
问答
  • 1.符号信息和调试信息 符号信息(symbols)和调试信息(debug info)是由不同段区分的。 使用 readelf -S binfile 可以查看ELF文件的所有段。 调试信息相关的段: # readelf -S a.out | grep debug [27] .debug...

    1.符号表信息和调试信息

    符号表信息(symbols)和调试信息(debug info)是由不同段区分的。
    使用 readelf -S binfile 可以查看ELF文件的所有段。

    调试信息相关的段:

    # readelf -S a.out | grep debug
      [27] .debug_aranges    PROGBITS         0000000000000000  000016d0
      [28] .debug_info       PROGBITS         0000000000000000  00001700
      [29] .debug_abbrev     PROGBITS         0000000000000000  00001a0f
      [30] .debug_line       PROGBITS         0000000000000000  00001adb
      [31] .debug_str        PROGBITS         0000000000000000  00001bd2
    

    符号表相关的段:

    # readelf -S a.out | grep tab
      [32] .symtab           SYMTAB           0000000000000000  00001e18
      [33] .strtab           STRTAB           0000000000000000  00002670
      [34] .shstrtab         STRTAB           0000000000000000  00002a8f
    

    注: 下文中提及的符号表相关段将不包括 .shstrtab 段,因其不会被strip或eu-strip移除。

    RedHat的system libraries仍保留symbols;这使得它的库文件稍大,但调试方便;
    Debian的system libraries不保留symbols,而是将symbols和调试信息都保存在.debug文件中; 这样, 系统库更小,但调试时需要拥有这些.debug文件。

    2. strip命令

    strip <option[s]> <in-file[s]>

    常用选项如下:

    -s --strip-all
        Remove all symbol and relocation information
        注: 删除其他符号表段和调试信息段,但不删除 .shstrtab 段
        
    -g -S -d --strip-debug
        Remove all debugging symbols & sections
        这几个选项的功能是一样,即移除上述5个".debug_"开头的调试信息段,仍会保留符号表
        
    --only-keep-debug
        Strip everything but the debug information
        注:段的总数量没有减少,但文件大小减少了;对比了"readelf -S"输出中的"offset"段,发现其中前面若干段的offset都没有变化,即size为0了。
        
    -R --remove-section=<name>
        Also remove section <name> from the output
        移除指定段,比如 
        strip --remove-section=.symtab a.out
        strip --remove-section=.strtab a.out
    

    不输入任何选项的默认行为是"-s",即"–strip-all".

    3. eu-strip 命令

    功能: 可将符号表和调试信息都导入指定文件中,以减小原二进制文件的大小。
    至于如何将导出的文件告知gdb,请参见下面的第5节"objcopy命令"

    使用举例:

    eu-strip a.out -f a.debug
    

    以上命令将a.out中的符号表段和调试信息段都移出到 a.debug 文件中。这样,a.out的size会减小很多。
    而此时,a.out 中会多一个 .gnu_debuglink 段,它是用来保存符号表位置的。
    之后,再用gdb去打开并运行 a.out 时,gdb还可以找到 a.debug 这样的符号表及调试信息文件。

    另注: CentOS安装eu-strip

    yum install elfutils
    

    4. gdb 寻找符号表和调试信息文件

    用 gdb 查看 coredump 的时候,或者用 gdb 去运行上述被剥离了符号表和调试信息的二进制文件时,gdb会去自动搜索符号表。
    gdb 会去查找当前目录、gdb默认的搜索路径 /usr/lib/debug 、 以及 /usr/lib/debug 下的子路径。具体顺序和具体子路径,请参阅参考文档。

    (gdb) show debug-file-directory 
    The directory where separate debug symbols are searched for is "/usr/lib/debug".
    

    如果符号表文件既不在当前目录,也不在 /usr/lib/debug, 那么可以使用 命令告诉gdb去哪里找到符号表,如下:

    (gdb) symbol-file /root/test.sym
    (gdb) bt 
    

    5. objcopy 命令移除和添加符号表及调试信息

    1. 删除指定的section
        objcopy -R .comment -R .note.ABI-tag
    
    1. 移除和添加符号表及调试信息
        gcc -g -o test test.c
        
        # test.debug 将包含调试信息和符号表; 而test将只包含调试信息
        objcopy --only-keep-debug test test.debug
        
        # 从test文件里剥离debug段
        objcopy --strip-debug test
        
        # 更彻底地,上面这句可以换成下面这句以移除所有的debug信息和符号表
        strip -s test 
        
        # 在二进制文件 test 中添加 .gnu_debuglink 段以指向符号表和调试信息文件
        objcopy --add-gnu-debuglink=test.debug test
        
        # objdump 命令可以查看指定的section
        objdump -s -j .gnu_debuglink test 
    

    6. 使用链接器ld去除符号表

    动态链接库是ELF(Executable and Linkable Format)文件的一种,其中包含了2个符号表:

    • .symtab 包含大量的信息(包括全局符号global symbols)
    • .dynsym 只保留.symtab中的全局符号
      .dynsym 是 .symtab 的子集;strip命令会去掉ELF文件中.symtab,但不会去掉.dynsym

    使用ld 的 -s 和 -S 选项可以在链接的时候去除符号表。-s去除所有符号表信息;-S去除调试符号信息。

    -s
    --strip-all
        Omit all symbol information from the output file.
    
    -S
    --strip-debug
        Omit debugger symbol information (but not all symbols) from the output file.
    

    7. gcc 静态编译

    # 让可执行文件没有.dynsym动态链接表;在支持动态链接的系统上,阻止连接共享库。该选项在其它系统上无效。
    gcc -static
    
    # 让可执行文件没有.dynstr动态链接字符表;不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。
    gcc -nostdlib
    

    参考文献

    • https://www.technovelty.org/code/split-debugging-info-symbols.html
    • https://www.technovelty.org/code/separate-debug-info.html
    展开全文
  • 特殊符号

    万次阅读 2019-02-18 11:58:53
    @[T■特殊符号:•⊙①⊕◎Θ⊙●○¤㊣㈱@の■□★☆◆◇◣◢ ◤◥▲△▼▽⊿◢ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊▋▌▍▎▏■ ▓ 回 □ 〓≡ ↑↓→←↘↙♀♂┇┅‖$ @ * &amp; # ※ 卍 卐 ∞Ψ §∮ № ⌒ * ░...

    @[T■特殊符号:•⊙①⊕◎Θ⊙●○¤㊣㈱@の■□★☆◆◇◣◢ ◤◥▲△▼▽⊿◢
    ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊▋▌▍▎▏■ ▓ 回 □ 〓≡
    ↑↓→←↘↙♀♂┇┅‖$ @ * & # ※ 卍 卐 ∞Ψ §∮ № ⌒ *
    ░ ▒ ▣ ▤ ▥ ▦ ▧ ▨ ▩ ▪ ▫ ▬ ◆ ◇ ◈ ◎ ● ◐ ◑ ☉ ☎ ☏ ☜ ☞ ☺ ☻ ☼ ♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♨ ♩ ♪ ♫ ♬ ♭♯
    ■标点符号: .。,、;:?!ˉˇ¨~ 々~‖∶"'`|•… — ~ - 〃 ‘’“”〝〞〔〕〈〉《》「」『』〖〗【】()[]{}︻︼﹄﹃ ■数学符号: +-×÷﹢﹣±/= ∥∠ ≌ ∽ ≦ ≧ ≒﹤﹥ ≈ ≡ ≠ = ≤ ≥ < > ≮ ≯ ∷ ∶ ∫ ∮ ∝ ∞ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∵ ∴ ⊥ ∥ ∠ ⌒ ⊙ √∟⊿ ㏒ ㏑ % ‰ ■单位符号:㎎ ㎏ ㎜ ㎝ ㎞ ㎡ ㏄ ㏎ ㏑ ㏒ ㏕ ℡ % ‰ ℃ ℉ °′″$ £ ¥ ¢ ♂ ♀℅ ■数字序号:① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ № ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ■希腊字母:Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ ν ξ ο π ρ σ η θ ι κ λ μ τ υ φ χ ψ ω ■俄语字符:А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ■汉语拼音:ā á ǎ à ō ó ǒ ò ē é ě è ī í ǐ ì ū ú ǔ ù ǖ ǘ ǚ ǜ ü ê ɑ  ń ň  ɡ ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ ■中文字符: 偏旁部首:横起:夬丅乛 竖起:丄丩乚 撇起:夊亅亇厃々 捺起:丂 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万 亿 吉 太 拍 艾 分 厘 毫 微 卍 卐 卄 巜 弍 弎 弐 朤 氺 曱 甴 囍 兀 々 〆 の ぁ 〡 〢 〣 〤 〥 〦 〧 〨 〩 ■日语:ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん ■注音码:ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ ■绘表符号:─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛ ├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻ ┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋ ═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╳ ╔ ╗╝╚ ╬ ═ ╓ ╩ ┠ ┨┯ ┷┏ ┓┗ ┛┳⊥﹃﹄┌╭╮╯╰ 表情符号:*^_^* ^*^ ^-^ ^_^ ^︵^ ■经典字符全收集:、。•ˉˇ¨〃々—~‖…‘’“”〔〕〈 〉《》「」『』〖〗【】±+-×÷∧∨∑∏∪∩∈√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∶ ∵∴∷♂♀°′″℃$¤¢£‰§№☆★〇○●◎◇◆ 回□■△▽⊿▲▼◣◤◢◥▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▓※→←↑↓↖↗↘↙〓 ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ①②③④⑤⑥⑦⑧⑨⑩⒈⒉⒊⒋ ⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθ ικλμνξοπρστυφχψ ω︵︶︹︺︿﹀︽︾﹁﹂﹃﹄︻︼︷︸АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыь эюāáǎàēéěèī íǐìōóǒòūúǔùǖǘǚǜüêɑńňɡㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ︱︳︴﹏﹋﹌─━│┃┄┅┆ ┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄ ╅╆╇╈╉╊╋⊕㊣㈱曱甴囍∟┅﹊﹍╭ ╮╰ ╯ _ ^︵^﹕﹗/\ " < >,•。{}~~() -√ $ @ * & # 卐℡ ぁ〝〞ミ灬№*ㄨ≮≯ ﹢﹣/∝≌∽≦≧≒﹤﹥じぷ┗┛¥£§я-―‥…‰′″℅℉№℡∕∝∣═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╱ ╲╳▔▕〆〒〡〢〣〤〥〦〧〨〩㎎ ㎏ ㎜ ㎝ ㎞ ㎡ ㏄ ㏎㏑㏒㏕兀︰﹍﹎ ------
    ■ HTML特殊字符编码大全:往网页中输入特殊字符,需在html代码中加入以&开头的字母组合或以&#开头的数字。下面就是以字母或数字表示的特殊符号大全。


    ´ ´ © © > > µ µ ® ®
    & & ° ° ¡ ¡   » »
    ¦ ¦ ÷ ÷ ¿ ¿ ¬ ¬ § §
    • • ½ ½ « « ¶ ¶ ¨ ¨
    ¸ ¸ ¼ ¼ < < ± ± × ×
    ¢ ¢ ¾ ¾ ¯ ¯ " " ™ ™


    € € £ £ ¥ ¥


    „ „ … … • · › › ª ª
    ˆ ˆ “ “ — — ’ ’ º º
    † † ‹ ‹ – – ‚ ‚ ” ”
    ‡ ‡ ‘ ‘ ‰ ‰ ¬ ­ ˜ ˜


    ≈ ≈ ⁄ ⁄ ← ← ∂ ∂ ♠ ♠
    ∩ ∩ ≥ ≥ ≤ ≤ ″ ″ ∑ ∑
    ♣ ♣ ↔ ↔ ◊ ◊ ′ ′ ↑ ↑
    ↓ ↓ ♥ ♥ − − ∏ ∏

    ♦ ♦ ∞ ∞ ≠ ≠ √ √

    ≡ ≡ ∫ ∫ ‾ ‾ → →


    α α η η μ μ π π θ θ
    β β γ γ ν ν ψ ψ υ υ
    χ χ ι ι ω ω ρ ρ ξ ξ
    δ δ κ κ ο ο σ σ ζ ζ
    ε ε λ λ φ φ τ τ


    Α Α Η Η Μ Μ Π Π Θ Θ
    Β Β Γ Γ Ν Ν Ψ Ψ Υ Υ
    Χ Χ Ι Ι Ω Ω Ρ Ρ Ξ Ξ
    Δ Δ Κ Κ Ο Ο Σ Σ Ζ Ζ
    Ε Ε Λ Λ Φ Φ Τ Τ ς ς


    ■ HTML常用特殊字符:只要你认识了 HTML 标记,你便会知道特殊字符的用处。
    HTML 原代码 显示结果 描述
    < < 小于号或显示标记
    > > 大于号或显示标记
    & & 可用于显示其它特殊字符
    " " 引号
    ® ® 已注册
    © © 版权
    ™ ™ 商标
        半个空白位
        一个空白位
      不断行的空白

    OC](这里写自定义目录标题)

    欢迎使用Markdown编辑器

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to-HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

    Γ(z)=0tz1etdt&ThinSpace;. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0开始我的操作确认?结束yesno
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • ES6之符号符号属性

    万次阅读 2019-12-16 23:50:02
    在 JS 已有的基本类型(字符串、数值、布尔类型、 null 与 undefined )之外, ES6 引入了一种新的基本类型:符号(Symbol)。符号起初被设计用于创建对象私有成员,而这也是 JS 开发者期待已久的特性。在符号诞生...

    在 JS 已有的基本类型(字符串、数值、布尔类型、 null 与 undefined )之外, ES6 引入了一种新的基本类型:符号(Symbol)。符号起初被设计用于创建对象私有成员,而这也是 JS 开发者期待已久的特性。在符号诞生之前,将字符串作为属性名称导致属性可以被轻易访问,无论命名规则如何。而“私有名称”意味着开发者可以创建非字符串类型的属性名称,由此可以防止使用常规手段来探查这些名称。

    “私有名称”提案最终发展成为 ES6中的符号,而本章将会教你如何有效使用它。虽然它只保
    留了实现细节(即:引入了非字符串类型的属性名)而丢弃了私有性意图,但它仍然显著有别于对象的其余属性。

    创建一个符号

    符号没有字面量形式,这在 JS 的基本类型中是独一无二的,有别于布尔类型的 true 或数
    值类型的 42 等等。你可以使用全局 Symbol 函数来创建一个符号值,正如下面这个例子:

    let firstName = Symbol();
    let person = {};
    person[firstName] = "Nicholas";
    console.log(person[firstName]); // "Nicholas"
    
    

    此代码创建了一个符号类型的 firstName 变量,并将它作为 person 对象的一个属性,而每
    次访问该属性都要使用这个符号值。为符号变量适当命名是个好主意,这样你就可以很容易
    地说明它的含义。

    由于符号值是基本类型的值,因此调用 new Symbol() 将会抛出错误。你可以通过 new
    Object(yourSymbol) 来创建一个符号实例,但尚不清楚这能有什么作用。

    Symbol 函数还可以接受一个额外的参数用于描述符号值,该描述并不能用来访问对应属性,
    但它能用于调试,例如:

    let firstName = Symbol("first name");
    let person = {};
    person[firstName] = "Nicholas";
    console.log("first name" in person); // false
    console.log(person[firstName]); // "Nicholas"
    console.log(firstName); // "Symbol(first name)"
    
    

    Symbol是独一无二的,"first name"只是对Symbol的描述

    符号的描述信息被存储在内部属性 [[Description]] 中,当符号的 toString() 方法被显式
    或隐式调用时,该属性都会被读取。在本例中, console.log() 隐式调用了 firstName 变量
    的 toString() 方法,于是描述信息就被输出到日志。此外没有任何办法可以从代码中直接
    访问 [[Description]] 属性。我建议始终应给符号提供描述信息,以便更好地阅读代码或进
    行调试。

    由于符号是基本类型的值,因此你可以使用 typeof 运算符来判断一个变量是否为符
    号。 ES6 扩充了 typeof 的功能以便让它在作用于符号值的时候能够返回 “symbol” ,例如

    let symbol = Symbol("test symbol");
    console.log(typeof symbol); // "symbol"
    
    

    使用符号值

    你可以在任意能使用“需计算属性名”的场合使用,还能在对象的“需计算字面量属性名”中使用符号,此外还可以在合使用符号。Object.defineProperty() 或 Object.defineProperties() 调用中使用它

    共享符号值

    你或许想在不同的代码段中使用相同的符号值,例如:假设在应用中需要在两个不同的对象
    类型中使用同一个符号属性,用来表示一个唯一标识符。跨越文件或代码来追踪符号值是很
    困难并且易错的,为此, ES6 提供了“全局符号注册表”供你在任意时间点进行访问。

    若你想创建共享符号值,应使用 Symbol.for() 方法而不是 Symbol() 方法。 Symbol.for()
    方法仅接受单个字符串类型的参数,作为目标符号值的标识符,同时此参数也会成为该符号
    的描述信息。例如:

    let uid = Symbol.for("uid");
    let object = {};
    object[uid] = "12345";
    console.log(object[uid]); // "12345"
    console.log(uid); // "Symbol(uid)"
    

    Symbol.for() 方法首先会搜索全局符号注册表,看是否存在一个键值为 “uid” 的符号值。
    若是,该方法会返回这个已存在的符号值;否则,会创建一个新的符号值,并使用该键值将
    其记录到全局符号注册表中,然后返回这个新的符号值。这就意味着此后使用同一个键值去
    调用 Symbol.for() 方法都将会返回同一个符号值,就像下面这个例子:

    let uid = Symbol.for("uid");
    let object = {
    [uid]: "12345"
    };
    console.log(object[uid]); // "12345"
    console.log(uid); // "Symbol(uid)"
    let uid2 = Symbol.for("uid");
    console.log(uid === uid2); // true
    console.log(object[uid2]); // "12345"
    console.log(uid2); // "Symbol(uid)"
    

    本例中, uid 与 uid2 包含同一个符号值,因此它们可以互换使用。第一次调用
    Symbol.for() 创建了这个符号值,而第二次调用则从全局符号注册表中将其检索了出来。

    共享符号值还有另一个独特用法,你可以使用 Symbol.keyFor() 方法在全局符号注册表中根
    据符号值检索出对应的键值,例如:

    let uid = Symbol.for("uid");
    console.log(Symbol.keyFor(uid)); // "uid"
    let uid2 = Symbol.for("uid");
    console.log(Symbol.keyFor(uid2)); // "uid"
    let uid3 = Symbol("uid");
    console.log(Symbol.keyFor(uid3)); // undefined
    
    

    符号值的转换

    类型转换是 JS 语言重要的一部分,能够非常灵活地将一种数据类型转换为另一种。然而符号
    类型在进行转换时非常不灵活,因为其他类型缺乏与符号值的合理等价,尤其是符号值无法
    被转换为字符串值或数值。因此将符号作为属性所达成的效果,是其他类型所无法替代的。

    let uid = Symbol.for("uid"),
    desc = String(uid);
    console.log(desc);
    

    String() 方法调用了 uid.toString() 来获取符号的字符串描述信息。但若你想直接将符号
    转换为字符串,则会引发错误:

    let uid = Symbol.for("uid"),
    desc = uid + ""; // 引发错
    

    检索符号属性

    Object.keys() 与 Object.getOwnPropertyNames() 方法可以检索对象的所有属性名称,前者
    返回所有的可枚举属性名称,而后者则返回所有属性名称而无视其是否可枚举。然而两者都
    不能返回符号类型的属性,以保持它们在 ES5 中的功能不发生变化。而 ES6 新增了
    Object.getOwnPropertySymbols() 方法,以便让你可以检索对象的符号类型属性。

    Object.getOwnPropertySymbols() 方法会返回一个数组,包含了对象自有属性名中的符号值,
    例如:

    let uid = Symbol.for("uid");
    let object = {
    [uid]: "12345"
    };
    let symbols = Object.getOwnPropertySymbols(object);
    console.log(symbols.length); // 1
    console.log(symbols[0]); // "Symbol(uid)"
    console.log(object[symbols[0]]); // "12345"
    
    

    使用知名符号暴露内部方法

    ES6 定义了“知名符号”来代表 JS 中一些公共行为,而这些行为此前被认为只能是内部操作。
    每一个知名符号都对应全局 Symbol 对象的一个属性,例如 Symbol.create 。

    这些知名符号是:

    • Symbol.hasInstance :供 instanceof 运算符使用的一个方法,用于判断对象继承关
      系。

    Symbol.hasInstance 方法只接受单个参数,即需要检测的值。如果该值是本函数的一个实

    • Symbol.isConcatSpreadable:一个布尔类型值,在集合对象作为参数传递给Array.prototype.concat() 方法时,指示是否要将该集合的元素扁平化。
    • Symbol.iterator :返回迭代器的一个方法。
    • Symbol.match :供 String.prototype.match() 函数使用的一个方法,用于比较字符串。
    • Symbol.replace :供 String.prototype.replace()函数使用的一个方法,用于替换子字符串。
    • Symbol.search :供 String.prototype.search() 函数使用的一个方法,用于定位子字符串。
    • Symbol.species :用于产生派生对象的构造器。
    • Symbol.split :供 String.prototype.split() 函数使用的一个方法,用于分割字符串。
    • Symbol.toPrimitive :返回对象所对应的基本类型值的一个方法。
    • Symbol.toStringTag :供String.prototype.toString()函数使用的一个方法,用于创建对象的描述信息。
    • Symbol.unscopables :一个对象,该对象的属性指示了哪些属性名不允许被包含在
      with 语句中。

    示例:

    Symbol.hasInstance 属性

    每个函数都具有一个 Symbol.hasInstance 方法,用于判断指定对象是否为本函数的一个实
    例。这个方法定义在 Function.prototype 上,因此所有函数都继承了面对 instanceof 运算
    符时的默认行为。 Symbol.hasInstance 属性自身是不可写入、不可配置、不可枚举的,从而
    保证它不会被错误地重写。

    Symbol.hasInstance 方法只接受单个参数,即需要检测的值。如果该值是本函数的一个实
    例,则方法会返回 true 。为了理解该方法是如何工作的,可研究下述代码:

    obj instanceof Array;
    
    

    这句代码等价于:

    Array[Symbol.hasInstance](obj);
    

    Symbol.isConcatSpreadable

    JS 在数组上设计了 concat() 方法用于将两个数组连接到一起,此处示范了如何使用该方
    法:

    let colors1 = [ "red", "green" ],
    colors2 = colors1.concat([ "blue", "black" ]);
    console.log(colors2.length); // 4
    console.log(colors2); // ["red","green","blue","black"]
    

    Symbol.isConcatSpreadable 属性是一个布尔类型的属性,它表示目标对象拥有长度属性与数
    值类型的键、并且数值类型键所对应的属性值在参与 concat() 调用时需要被分离为个体。
    该符号与其他的知名符号不同,默认情况下并不会作为任意常规对象的属性。它只出现在特
    定类型的对象上,用来标示该对象在作为 concat() 参数时应如何工作,从而有效改变该对
    象的默认行为。你可以用它来定义任意类型的对象,让该对象在参与 concat() 调用时能够
    表现得像数组一样,例如:

    let collection = {
    0: "Hello",
    1: "world",
    length: 2,
    [Symbol.isConcatSpreadable]: true
    };
    let messages = [ "Hi" ].concat(collection);
    console.log(messages.length); // 3
    console.log(messages); // ["hi","Hello","world"]
    
    

    Symbol.match 、 Symbol.replace 、 Symbol.search 与Symbol.split

    在 JS 中,字符串与正则表达式有着密切的联系,尤其是字符串具有几个可以接受正则表达式
    作为参数的方法:

    • match(regex) :判断指定字符串是否与一个正则表达式相匹配;
    • replace(regex, replacement) :对正则表达式的匹配结果进行替换;
    • search(regex) :在字符串内对正则表达式的匹配结果进行定位;
    • split(regex) :使用正则表达式将字符串分割为数组。

    这些与正则表达式交互的方法,在 ES6 之前其实现细节是对开发者隐藏的,使得开发者无法
    将自定义对象模拟成正则表达式(并将它们传递给字符串的这些方法)。而 ES6 定义了 4 个
    符号以及对应的方法,将原生行为外包到内置的 RegExp 对象上。

    这 4 个符号表示可以将正则表达式作为字符串对应方法的第一个参数传入, Symbol.match
    对应 match() 方法, Symbol.replace 对应 replace() , Symbol.search 对应 search()
    , Symbol.split 则对应 split() 。这些符号属性被定义在 RegExp.prototype 上作为默认
    实现,以供对应的字符串方法使用。

    • Symbol.match :此函数接受一个字符串参数,并返回一个包含匹配结果的数组;若匹配
      失败,则返回 null 。
    • Symbol.replace :此函数接受一个字符串参数与一个替换用的字符串,并返回替换后的
      结果字符串。
    • Symbol.search :此函数接受一个字符串参数,并返回匹配结果的数值索引;若匹配失
      败,则返回 -1。
    • Symbol.split :此函数接受一个字符串参数,并返回一个用匹配值分割而成的字符串数
      组。

    在对象上定义这些属性,允许你创建能够进行模式匹配的对象,而无需使用正则表达式,并
    且允许在任何需要正则表达式的方法中使用该对象。这里有一个例子,展示了这些符号的用
    法:

    // 有效等价于 /^.{10}$/
    let hasLengthOf10 = {
        [Symbol.match]: function(value) {
         return value.length === 10 ? [value.substring(0, 10)] : null;
        },
        [Symbol.replace]: function(value, replacement) {
            return value.length === 10 ?
            replacement + value.substring(10) : value;
        },
        [Symbol.search]: function(value) {
            return value.length === 10 ? 0 : -1;
        },
        [Symbol.split]: function(value) {
            return value.length === 10 ? ["", ""] : [value];
        }
    };
    let message1 = "Hello world", // 11 characters
    message2 = "Hello John"; // 10 characters
    let match1 = message1.match(hasLengthOf10),
    match2 = message2.match(hasLengthOf10);
    console.log(match1); // null
    console.log(match2); // ["Hello John"]
    let replace1 = message1.replace(hasLengthOf10, "Howdy!"),
    replace2 = message2.replace(hasLengthOf10, "Howdy!");
    console.log(replace1); // "Hello world"
    console.log(replace2); // "Howdy!"
    let search1 = message1.search(hasLengthOf10),
    search2 = message2.search(hasLengthOf10);
    console.log(search1); // -1
    console.log(search2); // 0
    let split1 = message1.split(hasLengthOf10),
    split2 = message2.split(hasLengthOf10);
    console.log(split1); // ["Hello world"]
    console.log(split2); // ["", ""]
    

    Symbol.toPrimitive

    对于大部分常规对象,“数值模式”依次会有下述行为:

    1. 调用 valueOf() 方法,如果方法返回值是一个基本类型值,那么返回它;
    2. 否则,调用 toString() 方法,如果方法返回值是一个基本类型值,那么返回它;
    3. 否则,抛出一个错误。
      类似的,对于大部分常规对象,“字符串模式”依次会有下述行为:
    4. 调用 toString() 方法,如果方法返回值是一个基本类型值,那么返回它;
    5. 否则,调用 valueOf() 方法,如果方法返回值是一个基本类型值,那么返回它;
    6. 否则,抛出一个错误。
      在多数情况下,常规对象的默认模式都等价于数值模式(只有 Date 类型例外,它默认使用
      字符串模式)。通过定义 Symbol.toPrimitive 方法,你可以重写这些默认的转换行为。

    使用 Symbol.toPrimitive 属性并将一个函数赋值给它,便可以重写默认的转换行为,例如:

    function Temperature(degrees) {
        this.degrees = degrees;
    }
    Temperature.prototype[Symbol.toPrimitive] = function(hint) {
        switch (hint) {
        case "string":
            return this.degrees + "\u00b0"; // 温度符号
        case "number":
            return this.degrees;
        case "default":
            return this.degrees + " degrees";
        }
    };
    let freezing = new Temperature(32);
    console.log(freezing + "!"); // "32 degrees!"
    console.log(freezing / 2); // 16
    console.log(String(freezing)); 
    

    Symbol.toStringTag

    ES6 通过 Symbol.toStringTag 重定义了相关行为,该符号代表了所有对象的一个属性,定义
    了 Object.prototype.toString.call() 被调用时应当返回什么值。对于数组来说,在
    Symbol.toStringTag 属性中存储了 “Array” 值,于是该函数的返回值也就是 “Array” 。同样,你可以在自设对象上定义 Symbol.toStringTag 的值:

    function Person(name) {
        this.name = name;
    }
    Person.prototype[Symbol.toStringTag] = "Person";
    let me = new Person("Nicholas");
    console.log(me.toString()); // "[object Person]"
    console.log(Object.prototype.toString.call(me)); // "[object Person]"
    
    

    Symbol.unscopables

    Symbol.unscopables 符号在 Array.prototype 上使用,以指定哪些属性不允许在 with 语句
    内被绑定。 Symbol.unscopables 属性是一个对象,当提供该属性时,它的键就是用于忽略
    with 语句绑定的标识符,键值为 true 代表屏蔽绑定。以下是数组的 Symbol.unscopables
    属性的默认值:

    // 默认内置在 ES6 中
    Array.prototype[Symbol.unscopables] = Object.assign(Object.create(null), {
        copyWithin: true,
        entries: true,
        fill: true,
        find: true,
        findIndex: true,
        keys: true,
        values: true
    });
    

    总结

    符号是 JS 新引入的基本类型值,它用于创建不可枚举的属性,并且这些属性在不引用符号的
    情况下是无法访问的。

    虽然符号类型的属性不是真正的私有属性,但它们难以被无意修改,因此在需要提供保护以
    防止开发者改动的场合中,它们非常合适。

    你可以为符号提供描述信息以便更容易地辨识它们的值。全局符号注册表允许你使用相同的
    描述信息,以便在不同的代码段中共享符号值,这样相同的符号值就可以在不同位置用于相
    同目的。

    Object.keys() 或 Object.getOwnPropertyNames() 不会返回符号值,因此 ES6 新增了一个
    Object.getOwnPropertySymbols() 方法,允许检索符号类型的对象属性。而你依然可以使用
    Object.defineProperty() 与 Object.defineProperties() 方法对符号类型的属性进行修改。

    “知名符号”使用了全局符号常量(例如 Symbol.hasInstance ),为常规对象定义了一些功
    能,而这些功能原先仅限内部使用。这些符号按规范使用 Symbol. 的前缀,允许开发者通过
    多种方式去修改常规对象的行为。

    展开全文
  • nm 命令 程序符号信息查看

    千次阅读 2017-05-27 08:19:46
    显示关于对象文件、可执行文件以及对象文件库里的符号信息。 语法 nm [ -A ] [ -C ] [ -X {32|64|32_64}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B | ...


    用途

    显示关于对象文件、可执行文件以及对象文件库里的符号信息。

    语法

    nm [ -A ] [ -C ] [ -X {32|64|32_64}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B -P ] [ -e -g | -u ] [ -d -o -x -tFormat ] File ...

    描述

    nm 命令显示关于指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。 如果文件没有包含符号信息,nm 命令报告该情况,但不把它解释为出错条件。 nm 命令缺省情况下报告十进制符号表示法下的数字值。

    nm 命令把以下符号信息写入标准输出:

    • 对象名

      如果您指定了 -A 选项,则 nm 命令 只报告与该文件有关的或者库或者对象名。

    • 符号名称
    • 符号类型

      nm 命令使用以下符号(用同样的字符表示弱符号作为全局符号)之一来表示文件符号类型:

      A Global absolute 符号。
      a Local absolute 符号。
      B Global bss 符号。
      b Local bss 符号。
      D Global data 符号。
      d Local data 符号。
      f 源文件名称符号。
      T Global text 符号。
      t Local text 符号。
      U 未定义符号。
    • 大小

      如果可应用,nm 命令报告与符号有关的大小。

    标志

     

    -A 每行或者显示全路径名称或者显示对象库名。
    -B 在 Berkeley 软件分发(BSD)格式中显示输出:

     

    值   类型   名称
    -C 限制解码(demangle) C++ 名称。缺省是解码所有 C++ 符号名。
    注:
    C++ 对象文件中的符号在被使用前它们的名称已经被解码了。
    -d 用十进制显示符号的值和大小。这是缺省的。
    -e 只显示静态的和外部的(全局)符号。
    -f 显示完整的输出,包括冗余的 .text、 .data 以及 .bss 符号,这些在通常都是被限制的。
    -g 只显示外部的(全局)符号。
    -h 限制输出头数据的显示。
    -l 通过给 WEAK 符号的编码键附加一个 * 来区分 WEAK 和 GLOBAL 符号。 如果和 -P 选项一起使用, WEAK 符号的符号类型显示如下:
    V
    Weak Data 符号
    W
    Weak Text 符号
    w
    Weak 未定义符号
    Z
    Weak bss 符号
    -o 用八进制而不是十进制数来显示符号的值和大小。
    -P 以标准可移植输出格式显示信息:

     

    库/对象名  名称   类型   值   大小

    该格式以十六进制符号表示法显示数字值,除非您用 -t-d 或 -o 标志指定不同的格式。

    如果您指定了 -A 标志 -P 标志只显示 库/对象名字段。同样,-P 标志只显示大小适用的符号大小字段。

    -p 不排序。输出按符号表顺序打印。
    -r 倒序排序。
    -T 把可能会溢出它的列的每个名字截短,使显示的名字的最后一个字符是星号(*)。 缺省情况下,nm 显示列出的符号的全名,并且一个比为其设置的列的宽度长的名称会引起名称后的每个列无法对齐。
    -t Format 显示指定格式下的数字值,其中 Format 参数是以下符号表示法之一:
    d
    十进制符号表示法。这是 nm 命令的缺省格式。
    o
    八进制符号表示法。
    x
    十六进制符号表示法。
    -u 只显示未定义符号。
    -v 按值而不是按字母表顺序排序输出。
    -x 用十六进制而不是十进制数来显示符号的值和大小。
    -X mode 指定 nm 应该检查的对象文件的类型。 mode 必须是下列之一:
    32
    只处理 32 位对象文件
    64
    只处理 64 位对象文件
    32_64
    处理 32 位和 64 位对象文件

    缺省是处理 32 位对象文件(忽略 64 位对象)。 mode 也可以 OBJECT_MODE 环境变量来设置。例如,OBJECT_MODE=64 使 nm 处理任何 64 位对象并且忽略 32 位对象。 -X 标志覆盖 OBJECT_MODE 变量。

    注:
    nm 命令支持 -- (双连字符)标志。如果文件名会被曲解为一个选项,该标志区别于 File 操作数。 例如,要指定文件名以连字符开始,请使用 -- 标志。

    退出状态

    该命令返回下列出口值:

    0 成功完成。
    >0 发生错误。

    示例

    1. 列出 a.out 对象文件的静态和外部符号,请输入:

       

      nm -e a.out
    2. 以十六进制显示符号大小和值并且按值排序符号,请输入:

       

      nm -xv a.out
    3. 显示 libc.a 中所有 64 位对象符号,忽略所有 32 位对象:

       

      nm -X64 /usr/lib/libc.a
    展开全文
  • iOS崩溃堆栈信息符号化解析

    千次阅读 2016-08-24 10:59:09
    最近一段时间,在iOS开发调试过程中以及上线之后,程序经常会出现崩溃...现在网上有很多关于解析崩溃堆栈信息符号化的博客,但是大多质量参差不齐,或者有些细节没有注意到。今天总结一下对iOS崩溃符号化的使用和技巧
  • 编译原理系列之八 符号

    千次阅读 2018-12-25 14:32:00
    符号表用来体现作用域与可见性信息 符号表的作用: ① 收集符号属性;(词法分析) ② 上下文语义的合法性检查的依据;(语法分析) ③ 作为目标代码生成阶段地址分配的依据;(语义分析) 符号表中语言符号可...
  • 符号

    千次阅读 2016-11-03 22:53:29
    符号表是一种供编译器存储关于源程序各种元素信息的数据结构。 符号表的功能包括以下几个方面: 1)收集源程序中各元素的信息。 2)上下文语义相关性检查的依据。 3)存储分配的依据。 实际上,符号...
  • 查看函数库.a函数符号信息

    千次阅读 2017-02-10 14:01:25
    对于一个给定的函数库,nm命令可以列出函数库中定义的所有符号,包括每个符号的值和类型。还可以给出在原程序中这个函数(符号)是在多少行定义的,不过这必须要求编译该函数库的时候加“-l”选项。  关于符号...
  • linux下找出内核符号信息的4种方法

    千次阅读 2020-12-27 09:34:58
    下面将介绍4种方式来获得内核符号信息的4种方法。 1.从 System.map 文件中得到地址 System.map文件在编译内核时生成,包含了内核在编译时的静态符号信息。 grep do_fork /boot/System.map-4.15.0-128-generic 就...
  • 符号表之一:符号属性

    千次阅读 2017-12-10 23:59:06
    符号表贯穿词法分析到语义处理的全过程,是用来存放在程序中出现的符号标识符(变量、函数、过程等)的语义属性在词法分析及语法分析阶段不断积累和更新符号表中的信息,并在词法分析到代码生成甚至动态链接的各个...
  • 11. 符号符号解析

    千次阅读 2018-12-04 21:35:00
    11.1 符号符号表 1. 符号的定义和引用 局部变量temp分配在栈中,不会在过程外被引用,因此不是符号定义 2. 连接符号的类型 (1)三种类型 每个可重定位目标模块m都有一个符号表,它包含了在m中定义和引用的符号,...
  • dladdr - 获取某个地址的符号信息

    万次阅读 2014-01-22 20:57:41
    名称 dladdr() - 获取某个地址的符号信息 概要 cc [ flag]... cfile ... -ldl [library]... #include dlfcn.h int dladdr(void *address, Dl_info *dlip); 多线程应用信息 该例行程序是线程安全的。 说明 dladdr() ...
  • 在编写与vector有关的函数时总是会出现如下警告:--------------------------------------------------------------------警告信息 warning C4018: 有符号/无符号不匹配-------------------------------------------...
  • 符号管理

    千次阅读 2017-08-29 11:21:56
    1.符号的作用 链接的接口:在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。比如目标文件B要用到了目标文件A中的函数“foo”,那么我们就称目标文件A定义(Define)...
  • 符号执行入门

    万次阅读 多人点赞 2018-05-09 08:12:08
    0x00 前言此前阅读了AEG相关的一些文章,发现符号执行可以说是基石,如果不能充分理解符号执行就很难真正深入AEG的研究。于是我找了一些符号执行领域的经典论文,预计会做一系列的总结,主要包括以下几个内容:(1)...
  • <br />在编写与vector有关的函数时总是会出现如下警告: -------------------------------------------------------------------- 警告信息 warning C4018: 有符号/无符号不匹配 -------------...
  • arcmap的点图层的图例制作中,大小和颜色都是非常重要的信息,如果二者能够结合起来分别代表不同的属性信息,就能把更丰富的信息用更直观的方式体现出来。 方法比较简单,首先是打开属性对话框,点到symbology页。 ...
  • 数学符号大全

    千次阅读 2016-12-04 20:21:19
    数学符号大全
  • 各类常用符号

    万次阅读 多人点赞 2018-11-15 18:12:17
    常用符号 1、几何符号  ⊥ ∥ ∠ ⌒ ⊙ ≡ ≌ △ 2、代数符号  ∝ ∧ ∨ ~ ∫ ≠ ≤ ≥ ≈ ∞ ∶ 3、运算符号  如加号(+),减号(-),乘号(×或·),除号(÷或/),两个集合的并集(∪),交集(∩),...
  • 剥离与插入调试信息符号

    千次阅读 2016-08-04 17:31:12
    http://blog.chinaunix.net/uid-24774106-id-3526766.html
  • 符号化Symbol(符号)体系

    千次阅读 2016-08-18 11:31:58
    符号化Symbol(符号)体系 http://apps.hi.baidu.com/share/detail/23143648# 符号化Symbol(符号)体系 ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大类符号MarkerSymbol(点符号)、 LineSymbol(线符号)...
  • VxWorks 符号

    千次阅读 2014-07-22 11:48:41
    符号表初始化 符号表用于建立符号名称、类型和值之间的关系。其中,名称为null结尾的任意字符串;类型为标识各种符号的整数;值为一个字符指针。符号表主要用来作为目标模块加载的基础,但在需要名称和值关联的任何...
  • 空格符号复制html,空格网名符号复制

    千次阅读 2021-06-14 06:13:25
    空格网名符号复制搜狗输入法,v+1 在按下d 就是空格 :这里空格【】 这里还有一个空格: []弄了,在游戏里就是空白名空格符号复制法一:搜狗输入法将半角转换全角,快捷键(Shift+空格键),按空格(根据:半角空格...
  • 符号文件

    千次阅读 2013-05-23 14:03:32
    先不管什么是符号文件,先看看在没有符号文件支持时的情况,下面是VC8.0在没有符号文件支撑时的一个调用堆栈 > DllTwo.dll!003d1cde() [下面的框架可能不正确和/或缺失,没有为 DllTwo.dll 加载...
  • Linux特殊符号

    千次阅读 2019-03-20 15:50:29
    井号,表示符号后面的是注释文字,不会被执行 ; 分号,担任连续指令功能的符号 ;; 连续分号,专用于case的选项 ’ ’ 单引号,被单引号括住的内容,被视为单一字符串,引号内如果有表示...
  • GCC 生成的符号表调试信息剖析

    千次阅读 2014-07-19 18:36:14
    如打开'-g'选项,GCC编译'.c'文件时,把附加的调试信息插进'.s'文件,这些调试信息经汇编器和链接器稍加转换一直传到可执行文件中。这些调试信息包括行号、变量的类型和作用域、函数名字、函数参数和函数的...
  • 符号数和无符号

    千次阅读 2018-10-01 22:31:55
    专题:汇编语言中有符号数还是无符号数? 一、汇编语言在存储方面讲,有符号数和无符号数存储形式是一致的。 l 数据在内存或CPU的寄存器中都是按照有符号数的二进制补码方式存储的。  例如(在debug中测试): ...
  • 并不包含调试信息(未加载任何符号)

    万次阅读 2012-06-21 18:07:47
    今天调试一C++程序,按下F5,老是弹出一对话框显示信息:debugging information for 'myproject.exe' cannot be found or does not match. No symbols loaded....符号文件未加载。 起初,我以为是没有生成.pdb文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 843,936
精华内容 337,574
关键字:

信息符号