精华内容
下载资源
问答
  • PE4302说明文档

    2017-12-27 21:32:07
    PE4302英文原版文档,包括PE4302的器件说明、使用方案等
  • PE4302 STM32

    2017-07-23 17:37:00
    stm32 驱动 PE4302 步进
  • PE4302.pdf

    2015-08-08 14:57:48
    本文为PE4302的技术文档,本人只是转载,绝无它意。
  • PE4302衰减器资料.zip

    2019-11-27 18:04:34
    PE4302是一款高线性度,6位数字射频步进衰减器,0.5 dB步至31.5 dB的衰减范围,支持串并行数据控制衰减量,其次最大输入射频信号幅度为24dBm。于此类似的射频衰减器还是有很多的,比如PE43702和ADI公司的HMC624等等...
  • 本资源中含有型号为PE4302的数字射频衰减器的文档资料,以及keil工程,原理图等,能配合放大器,完成对增益的调节
  • 该文档是关于PE4302程控与码控的详细介绍。其中包括PE4302芯片的功能介绍以及对应模块的原理图、程控与码控的使用方法、程控对应的51、STM32程序。该文档系笔者学习过程中总结,部分资料借鉴于外部。
  • 两级ABA52563级联放大,可实现小信号20dB以上增益,PE4302实现0~31.5dB信号衰减
  • 单级ABA52563射频放大,和PE4302程控衰减,实测在1GHz以下可实现20dB左右增益,高于1GHz没有条件测试,内含原理图和PCB源文件
  • PE4302SCUCCESS.zip

    2019-08-02 10:13:47
    平台CCS,TM4C123GXL launchpad 开发板,测试可用
  • PE4302射频衰减器 程控衰减器 高线性衰减器 原理图和PCB 目录PE4302射频衰减器 程控衰减器 高线性衰减器 原理图和PCB基本原理芯片选型原理图&3D-PCB具体讲解模块原理图-PDF、原理图库、3D-PCB库下载 基本原理 ...

    PE4302射频衰减器 程控衰减器 高线性衰减器 原理图和PCB

    基本原理

    衰减器是一种提供衰减的电子元器件, 广泛地应用于电子设备中,它的主要用途是调整电路中信号的大小,改善阻抗匹配,能够缓冲阻抗的变化。是无线电领域的常用器件,射频衰减器相对于一般的电阻做分压衰减有高频更好的匹配特性,和线性度。

    芯片选型

    PE4302是一款高线性度,6位数字射频步进衰减器,0.5 dB步至31.5 dB的衰减范围,支持串并行数据控制衰减量,其次最大输入射频信号幅度为24dBm。于此类似的射频衰减器还是有很多的,比如PE43702和ADI公司的HMC624等等。

    原理图&3D-PCB

    射频衰减器原理比较简单,下面将主要对PCB布局和布线的一些细节讲解示意。
    在这里插入图片描述
    在这里插入图片描述

    具体讲解

    1、在电源芯片上选用了性价比很高的RT9193-3.3V,添加了D2作为电源反接保护。在路边电容上要大小兼备,一个大容值,一个小容值可以起到更好的滤波效果。
    在这里插入图片描述
    2、如下图所示,R1,R2为470欧上拉电阻,R3,R4为10K接地电阻,这样保证了断开拨码开关时输入电平为低,打开拨码开关是输入电平为高,拨码开关默认断开的情况下,输入PE4302的电平都是低。
    在这里插入图片描述
    3、P/S是芯片的串并行控制端,接高电平为串行控制,接低电平为并行控制。
    4、LE是芯片的使能端,接高电平芯片使能,可以实现不同的衰减。具体的工作模式如下图:
    在这里插入图片描述
    5、在P/S置低,LE置高的时候,C0.5-C16(网络标号)的并行控制口的衰减量是叠加的,例如需要11dB衰减,则需要将C1,C2,C8对应的开关置高,具体如下图:
    在这里插入图片描述
    6、当P/S置高,LE置高的时候,芯片处于串行工作模式,控制时序与要求如下图:
    在这里插入图片描述
    7、输入输出匹配电阻R5,R6只是作为预留,可根据自己的实际使用情况焊接。由于C1和C2的电容存在输入信号频率范围就兼容不到DC了,电容值越大兼容越低的频率,虽然芯片标称是到DC。
    8、在布线上,射频信号讲究直入直出,且信号线的宽度如果发生变化的话也必须是缓变的。
    9、在信号线周围都需要加上一圈接地孔保护信号。
    10、芯片底部焊盘需要良好接地,也就是需要打5个过地孔,其次是电源的滤波电容也要尽量靠近芯片。
    在这里插入图片描述

    模块原理图-PDF、原理图库、3D-PCB库下载

    仅供参考:PE4302资料

    展开全文
  • 基于stm32程控衰减器,可实现0-31.5任意步进控制
  • 亲测能用,PE302电赛亲自调试,稳定衰减
  • 全指材料(SH000987)- ...全指材料(SH000987)的历史市盈率PE详情 中证煤炭(SZ399998)- 2018-12-06日,当前值:8.8154,平均值:20.4,中位数:17.828049999999998,当前接近历史新低。中证煤炭(SZ399998)的历史市...

    全指材料(SH000987) - 2018-12-06日,当前值:12.043,平均值:30.37,中位数:26.0097,当前 接近历史新低。全指材料(SH000987)的历史市盈率PE详情

    中证煤炭(SZ399998) - 2018-12-06日,当前值:8.8154,平均值:20.4,中位数:17.828049999999998,当前 接近历史新低。中证煤炭(SZ399998)的历史市盈率PE详情

    中证传媒(SZ399971) - 2018-12-06日,当前值:19.9922,平均值:46.39,中位数:46.03435,当前 接近历史新低。中证传媒(SZ399971)的历史市盈率PE详情

    创业板指(SZ399006) - 2018-12-06日,当前值:28.0724,平均值:51.88,中位数:48.988699999999994,当前 高于 1.22% 的交易日。创业板指(SZ399006)的历史市盈率PE详情

    内地地产(SH000948) - 2018-12-06日,当前值:8.3531,平均值:16.86,中位数:15.3809,当前 高于 1.35% 的交易日。内地地产(SH000948)的历史市盈率PE详情

    中证500(SH000905) - 2018-12-06日,当前值:16.7932,平均值:34.08,中位数:32.5321,当前 高于 1.38% 的交易日。中证500(SH000905)的历史市盈率PE详情

    全指可选(SH000989) - 2018-12-06日,当前值:14.4656,平均值:21.64,中位数:20.5386,当前 高于 1.4% 的交易日。全指可选(SH000989)的历史市盈率PE详情

    中证环保(SH000827) - 2018-12-06日,当前值:17.5523,平均值:28.46,中位数:27.4438,当前 高于 1.79% 的交易日。中证环保(SH000827)的历史市盈率PE详情

    养老产业(SZ399812) - 2018-12-06日,当前值:18.5492,平均值:24.52,中位数:24.5932,当前 高于 2.19% 的交易日。养老产业(SZ399812)的历史市盈率PE详情

    中小板指(SZ399005) - 2018-12-06日,当前值:19.4626,平均值:33.29,中位数:31.794150000000002,当前 高于 2.27% 的交易日。中小板指(SZ399005)的历史市盈率PE详情

    全指信息(SH000993) - 2018-12-06日,当前值:27.2888,平均值:48.19,中位数:45.9837,当前 高于 2.46% 的交易日。全指信息(SH000993)的历史市盈率PE详情

    中证1000(SH000852) - 2018-12-06日,当前值:18.902,平均值:48.71,中位数:50.215,当前 高于 2.65% 的交易日。中证1000(SH000852)的历史市盈率PE详情

    创业板综指(SZ399102) - 2018-12-06日,当前值:30.4945,平均值:54.44,中位数:51.1794,当前 高于 2.73% 的交易日。创业板综指(SZ399102)的历史市盈率PE详情

    中证军工(SZ399967) - 2018-12-06日,当前值:46.1713,平均值:80.96,中位数:75.7774,当前 高于 2.74% 的交易日。中证军工(SZ399967)的历史市盈率PE详情

    中小板综指(SZ399101) - 2018-12-06日,当前值:21.4267,平均值:38.55,中位数:36.9773,当前 高于 3.02% 的交易日。中小板综指(SZ399101)的历史市盈率PE详情

    全指医药(SH000991) - 2018-12-06日,当前值:25.9322,平均值:36.66,中位数:36.2188,当前 高于 4.81% 的交易日。全指医药(SH000991)的历史市盈率PE详情

    医药100(SH000978) - 2018-12-06日,当前值:25.9412,平均值:34.2,中位数:34.2661,当前 高于 6.58% 的交易日。医药100(SH000978)的历史市盈率PE详情

    深证红利(SZ399324) - 2018-12-06日,当前值:11.8247,平均值:18.07,中位数:15.3635,当前 高于 6.68% 的交易日。深证红利(SZ399324)的历史市盈率PE详情

    中证医药(SH000933) - 2018-12-06日,当前值:25.6347,平均值:33.0,中位数:32.70255,当前 高于 8.15% 的交易日。中证医药(SH000933)的历史市盈率PE详情

    深证综指(SZ399106) - 2018-12-06日,当前值:18.6256,平均值:30.59,中位数:30.3032,当前 高于 8.86% 的交易日。深证综指(SZ399106)的历史市盈率PE详情

    中证红利(SH000922) - 2018-12-06日,当前值:7.5744,平均值:11.01,中位数:9.4643,当前 高于 14.23% 的交易日。中证红利(SH000922)的历史市盈率PE详情

    上证指数(SH000001) - 2018-12-06日,当前值:10.9488,平均值:19.73,中位数:15.7029,当前 高于 14.41% 的交易日。上证指数(SH000001)的历史市盈率PE详情

    沪深300(SH000300) - 2018-12-06日,当前值:10.4288,平均值:16.07,中位数:13.5053,当前 高于 16.93% 的交易日。沪深300(SH000300)的历史市盈率PE详情

    上证50(SH000016) - 2018-12-06日,当前值:9.1935,平均值:14.97,中位数:12.001100000000001,当前 高于 17.31% 的交易日。上证50(SH000016)的历史市盈率PE详情

    中证全指(SH000985) - 2018-12-06日,当前值:12.7088,平均值:18.82,中位数:17.235149999999997,当前 高于 18.42% 的交易日。中证全指(SH000985)的历史市盈率PE详情

    300红利(SH000821) - 2018-12-06日,当前值:7.4032,平均值:8.0,中位数:8.1071,当前 高于 24.3% 的交易日。300红利(SH000821)的历史市盈率PE详情

    深证成指(SZ399001) - 2018-12-06日,当前值:15.9418,平均值:24.31,中位数:23.4302,当前 高于 25.32% 的交易日。深证成指(SZ399001)的历史市盈率PE详情

    中证100(SH000903) - 2018-12-06日,当前值:9.8304,平均值:15.11,中位数:12.042100000000001,当前 高于 25.52% 的交易日。中证100(SH000903)的历史市盈率PE详情

    基本面50(SH000925) - 2018-12-06日,当前值:8.5156,平均值:10.68,中位数:9.4658,当前 高于 26.67% 的交易日。基本面50(SH000925)的历史市盈率PE详情

    300金融(SH000914) - 2018-12-06日,当前值:7.7613,平均值:12.38,中位数:8.7669,当前 高于 27.53% 的交易日。300金融(SH000914)的历史市盈率PE详情

    300医药(SH000913) - 2018-12-06日,当前值:27.7078,平均值:31.45,中位数:30.31545,当前 高于 30.29% 的交易日。300医药(SH000913)的历史市盈率PE详情

    全指消费(SH000990) - 2018-12-06日,当前值:23.7526,平均值:26.9,中位数:27.2987,当前 高于 30.5% 的交易日。全指消费(SH000990)的历史市盈率PE详情

    中证白酒(SZ399997) - 2018-12-06日,当前值:20.9882,平均值:25.11,中位数:23.876,当前 高于 30.58% 的交易日。中证白酒(SZ399997)的历史市盈率PE详情

    中证银行(SZ399986) - 2018-12-06日,当前值:6.332,平均值:6.69,中位数:6.58815,当前 高于 33.12% 的交易日。中证银行(SZ399986)的历史市盈率PE详情

    食品饮料(SH000807) - 2018-12-06日,当前值:23.0289,平均值:24.43,中位数:25.2298,当前 高于 38.93% 的交易日。食品饮料(SH000807)的历史市盈率PE详情

    恒生指数(HKHSI) - 2018-12-05日,当前值:10.201,平均值:10.87,中位数:10.3102,当前 高于 48.37% 的交易日。恒生指数(HKHSI)的历史市盈率PE详情

    证券公司(SZ399975) - 2018-12-06日,当前值:23.4523,平均值:24.6,中位数:23.6237,当前 高于 48.6% 的交易日。证券公司(SZ399975)的历史市盈率PE详情

    标普500(SP500) - 2018-12-05日,当前值:20.4489,平均值:20.03,中位数:20.1682,当前 高于 53.05% 的交易日。标普500(SP500)的历史市盈率PE详情

    央视50(SZ399550) - 2018-12-06日,当前值:8.3795,平均值:8.37,中位数:8.2604,当前 高于 55.65% 的交易日。央视50(SZ399550)的历史市盈率PE详情

    恒生国企(HKHSCEI) - 2018-12-05日,当前值:8.9374,平均值:9.53,中位数:8.4839,当前 高于 59.33% 的交易日。恒生国企(HKHSCEI)的历史市盈率PE详情

    来源:乌龟量化 androidinvest.com/ChinaIndicesPE/SH000300/

    转载于:https://www.cnblogs.com/xunziji/p/10077403.html

    展开全文
  • MHDR2X19, MHDR2X2, MHDR2X20, MHDR2X3, MHDR2X4, MHDR2X5, MHDR2X6, MHDR2X7, MHDR2X8, MHDR2X9, MIC5219-3.3, MPU6050, MPU6050_module, NE5532, NPN, NPN_SOT23, nrf58122, OPA2333, OPA695, OPA847, PE4302,...
  • x86-64 pe-bigobj-x86-64 pe-i386 srec symbolsrec verilog tekhex binary ihex plugin objdump:支持的体系结构: i386 i386:x86-64 i386:x64-32 i8086 i386:intel i386:x86-64:intel i386:x64-32:intel i386:nacl ...

    00. 目录

    01. GCC的二进制工具

    objdump 显示目标文件信息

    objcopy 复制目标文件

    02. objdump

    objdump用于显示一个或者多个目标文件的信息,由其选项来控制显示那些特定的信息。可以通过objdump软件反汇编执行程序,获得执行程序的汇编格式。

    objdump用法如下

    deng@itcast:~$ objdump --help
    用法:objdump <选项> <文件>
     显示来自目标 <文件> 的信息。
     至少必须给出以下选项之一:
      -a, --archive-headers    显示头信息
      -f, --file-headers       全面显示文件头
      -p, --private-headers    显示对象格式指定文件头信息
      -P, --private=OPT,OPT... Display object format specific contents
      -h, --[section-]headers  显示接头中的内容
      -x, --all-headers        显示所有可用到的头信息,包括符号表和重定位入口。
      -d, --disassemble        显示目标文件中的机器指令使用的汇编语言。该选项仅仅反汇编那些应该含有指令机器码的节。
      -D, --disassemble-all    反汇编所有节的内容
          --disassemble=<sym>  Display assembler contents from <sym>
      -S, --source             尽可能显示与反汇编混合的源代码
          --source-comment[=<txt>] Prefix lines of source code with <txt>
      -s, --full-contents      显示任何指定节的全部内容
      -g, --debugging          显示目标文件调试信息
      -e, --debugging-tags     显示目标文件使用ctags格式调试信息
      -G, --stabs              显示所有文件中的STABS信息
      -W[lLiaprmfFsoRtUuTgAckK] or
      --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
              =frames-interp,=str,=loc,=Ranges,=pubtypes,
              =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
              =addr,=cu_index,=links,=follow-links]
                               Display DWARF info in the file
      --ctf=SECTION            Display CTF info from SECTION
      -t, --syms               显示符号表内容
      -T, --dynamic-syms       显示动态符号表内容
      -r, --reloc              显示文件的重定向入口
      -R, --dynamic-reloc      Display the dynamic relocation entries in the file
      @<file>                  Read options from <file>
      -v, --version            Display this program's version number
      -i, --info               List object formats and architectures supported
      -H, --help               Display this information
    
     以下选项是可选的:
      -b, --target=BFDNAME           指定目标对象格式为BFDNAME
      -m, --architecture=MACHINE     指定体系结构为MACHINE
      -j, --section=NAME             只显示名称为NAME的节信息
      -M, --disassembler-options=OPT 反汇编器中通过文本OPT
      -EB --endian=big               指定大端格式
      -EL --endian=little            指定小端格式
          --file-start-context       包含从文件开始的上下文(与-S一起使用)
      -I, --include=DIR              增加目录为搜索路径
      -l, --line-numbers             在输出中包含行号和文件名
      -F, --file-offsets             Include file offsets when displaying information
      -C, --demangle[=STYLE]         将底层的符号解码位用户层的符号
                                      The STYLE, if specified, can be `auto', `gnu',
                                      `lucid', `arm', `hp', `edg', `gnu-v3', `java'
                                      or `gnat'
          --recurse-limit            Enable a limit on recursion whilst demangling.  [Default]
          --no-recurse-limit         Disable a limit on recursion whilst demangling
      -w, --wide                     对超过80列的输出设备指定一些行的格式
      -z, --disassemble-zeroes       Do not skip blocks of zeroes when disassembling
          --start-address=ADDR       Only process data whose address is >= ADDR
          --stop-address=ADDR        Only process data whose address is < ADDR
          --prefix-addresses         Print complete address alongside disassembly
          --[no-]show-raw-insn       在符号反汇编前显示十六进制信息
          --insn-width=WIDTH         Display WIDTH bytes on a single line for -d
          --adjust-vma=OFFSET        在所有节地址前增加OFFSET偏移量
          --special-syms             在符号dumps中包含特殊符号
          --inlines                  Print all inlines for source line (with -l)
          --prefix=PREFIX            Add PREFIX to absolute paths for -S
          --prefix-strip=LEVEL       Strip initial directory names for -S
          --dwarf-depth=N        Do not display DIEs at depth N or greater
          --dwarf-start=N        Display DIEs starting with N, at the same depth
                                 or deeper
          --dwarf-check          Make additional dwarf internal consistency checks.      
          --ctf-parent=SECTION       Use SECTION as the CTF parent
          --visualize-jumps          Visualize jumps by drawing ASCII art lines
          --visualize-jumps=color    Use colors in the ASCII art
          --visualize-jumps=extended-color   Use extended 8-bit color codes
          --visualize-jumps=off      Disable jump visualization
    
    objdump:支持的目标: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 pei-i386 pei-x86-64 elf64-l1om 
    elf64-k1om elf64-little elf64-big elf32-little elf32-big pe-x86-64 pe-bigobj-x86-64 pe-i386 srec 
    symbolsrec verilog tekhex binary ihex plugin
    objdump:支持的体系结构: i386 i386:x86-64 i386:x64-32 i8086 i386:intel i386:x86-64:intel i386:x64-32:intel 
    i386:nacl i386:x86-64:nacl i386:x64-32:nacl iamcu iamcu:intel l1om l1om:intel k1om k1om:intel
    
    The following i386/x86-64 specific disassembler options are supported for use
    with the -M switch (multiple options should be separated by commas):
      x86-64      Disassemble in 64bit mode
      i386        Disassemble in 32bit mode
      i8086       Disassemble in 16bit mode
      att         Display instruction in AT&T syntax
      intel       Display instruction in Intel syntax
      att-mnemonic
                  Display instruction in AT&T mnemonic
      intel-mnemonic
                  Display instruction in Intel mnemonic
      addr64      Assume 64bit address size
      addr32      Assume 32bit address size
      addr16      Assume 16bit address size
      data32      Assume 32bit data size
      data16      Assume 16bit data size
      suffix      Always display instruction suffix in AT&T syntax
      amd64       Display instruction in AMD64 ISA
      intel64     Display instruction in Intel64 ISA
    将 bug 报告到 <http://www.sourceware.org/bugzilla/>。
    deng@itcast:~$ 
    

    2.1 查看目标文件ELF头信息

    deng@itcast:~/share/3rd/1static_lib$ objdump -h add.o
    
    add.o:     文件格式 elf64-x86-64
    
    节:
    Idx Name          Size      VMA               LMA               File off  Algn
      0 .text         00000018  0000000000000000  0000000000000000  00000040  2**0
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
      1 .data         00000000  0000000000000000  0000000000000000  00000058  2**0
                      CONTENTS, ALLOC, LOAD, DATA
      2 .bss          00000000  0000000000000000  0000000000000000  00000058  2**0
                      ALLOC
      3 .comment      00000025  0000000000000000  0000000000000000  00000058  2**0
                      CONTENTS, READONLY
      4 .note.GNU-stack 00000000  0000000000000000  0000000000000000  0000007d  2**0
                      CONTENTS, READONLY
      5 .note.gnu.property 00000020  0000000000000000  0000000000000000  00000080  2**3
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      6 .eh_frame     00000038  0000000000000000  0000000000000000  000000a0  2**3
                      CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
    deng@itcast:~/share/3rd/1static_lib$ 
    

    2.2 查看可执行文件ELF头信息

    deng@itcast:~/test$ objdump -h a.out 
    
    a.out:     文件格式 elf64-x86-64
    
    节:
    Idx Name          Size      VMA               LMA               File off  Algn
      0 .interp       0000001c  0000000000000318  0000000000000318  00000318  2**0
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      1 .note.gnu.property 00000020  0000000000000338  0000000000000338  00000338  2**3
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      2 .note.gnu.build-id 00000024  0000000000000358  0000000000000358  00000358  2**2
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      3 .note.ABI-tag 00000020  000000000000037c  000000000000037c  0000037c  2**2
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      4 .gnu.hash     00000024  00000000000003a0  00000000000003a0  000003a0  2**3
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      5 .dynsym       000000a8  00000000000003c8  00000000000003c8  000003c8  2**3
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      6 .dynstr       00000082  0000000000000470  0000000000000470  00000470  2**0
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      7 .gnu.version  0000000e  00000000000004f2  00000000000004f2  000004f2  2**1
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      8 .gnu.version_r 00000020  0000000000000500  0000000000000500  00000500  2**3
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
      9 .rela.dyn     000000c0  0000000000000520  0000000000000520  00000520  2**3
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
     10 .rela.plt     00000018  00000000000005e0  00000000000005e0  000005e0  2**3
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
     11 .init         0000001b  0000000000001000  0000000000001000  00001000  2**2
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
     12 .plt          00000020  0000000000001020  0000000000001020  00001020  2**4
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
     13 .plt.got      00000010  0000000000001040  0000000000001040  00001040  2**4
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
     14 .plt.sec      00000010  0000000000001050  0000000000001050  00001050  2**4
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
     15 .text         00000185  0000000000001060  0000000000001060  00001060  2**4
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
     16 .fini         0000000d  00000000000011e8  00000000000011e8  000011e8  2**2
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
     17 .rodata       00000010  0000000000002000  0000000000002000  00002000  2**2
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
     18 .eh_frame_hdr 00000044  0000000000002010  0000000000002010  00002010  2**2
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
     19 .eh_frame     00000108  0000000000002058  0000000000002058  00002058  2**3
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
     20 .init_array   00000008  0000000000003db8  0000000000003db8  00002db8  2**3
                      CONTENTS, ALLOC, LOAD, DATA
     21 .fini_array   00000008  0000000000003dc0  0000000000003dc0  00002dc0  2**3
                      CONTENTS, ALLOC, LOAD, DATA
     22 .dynamic      000001f0  0000000000003dc8  0000000000003dc8  00002dc8  2**3
                      CONTENTS, ALLOC, LOAD, DATA
     23 .got          00000048  0000000000003fb8  0000000000003fb8  00002fb8  2**3
                      CONTENTS, ALLOC, LOAD, DATA
     24 .data         00000010  0000000000004000  0000000000004000  00003000  2**3
                      CONTENTS, ALLOC, LOAD, DATA
     25 .bss          00000008  0000000000004010  0000000000004010  00003010  2**0
                      ALLOC
     26 .comment      00000024  0000000000000000  0000000000000000  00003010  2**0
                      CONTENTS, READONLY
    deng@itcast:~/test$ 
    

    2.3 对二进制文件进行反汇编

    deng@itcast:~/share/3rd/1static_lib$ objdump -D add.o 
    
    add.o:     文件格式 elf64-x86-64
    
    
    Disassembly of section .text:
    
    0000000000000000 <add>:
       0:   f3 0f 1e fa             endbr64 
       4:   55                      push   %rbp
       5:   48 89 e5                mov    %rsp,%rbp
       8:   89 7d fc                mov    %edi,-0x4(%rbp)
       b:   89 75 f8                mov    %esi,-0x8(%rbp)
       e:   8b 55 fc                mov    -0x4(%rbp),%edx
      11:   8b 45 f8                mov    -0x8(%rbp),%eax
      14:   01 d0                   add    %edx,%eax
      16:   5d                      pop    %rbp
      17:   c3                      retq   
    
    Disassembly of section .comment:
    
    0000000000000000 <.comment>:
       0:   00 47 43                add    %al,0x43(%rdi)
       3:   43 3a 20                rex.XB cmp (%r8),%spl
       6:   28 55 62                sub    %dl,0x62(%rbp)
       9:   75 6e                   jne    79 <add+0x79>
       b:   74 75                   je     82 <add+0x82>
       d:   20 39                   and    %bh,(%rcx)
       f:   2e 33 2e                xor    %cs:(%rsi),%ebp
      12:   30 2d 31 30 75 62       xor    %ch,0x62753031(%rip)        # 62753049 <add+0x62753049>
      18:   75 6e                   jne    88 <add+0x88>
      1a:   74 75                   je     91 <add+0x91>
      1c:   32 29                   xor    (%rcx),%ch
      1e:   20 39                   and    %bh,(%rcx)
      20:   2e 33 2e                xor    %cs:(%rsi),%ebp
      23:   30 00                   xor    %al,(%rax)
    
    Disassembly of section .note.gnu.property:
    
    0000000000000000 <.note.gnu.property>:
       0:   04 00                   add    $0x0,%al
       2:   00 00                   add    %al,(%rax)
       4:   10 00                   adc    %al,(%rax)
       6:   00 00                   add    %al,(%rax)
       8:   05 00 00 00 47          add    $0x47000000,%eax
       d:   4e 55                   rex.WRX push %rbp
       f:   00 02                   add    %al,(%rdx)
      11:   00 00                   add    %al,(%rax)
      13:   c0 04 00 00             rolb   $0x0,(%rax,%rax,1)
      17:   00 03                   add    %al,(%rbx)
      19:   00 00                   add    %al,(%rax)
      1b:   00 00                   add    %al,(%rax)
      1d:   00 00                   add    %al,(%rax)
            ...
    
    Disassembly of section .eh_frame:
    
    0000000000000000 <.eh_frame>:
       0:   14 00                   adc    $0x0,%al
       2:   00 00                   add    %al,(%rax)
       4:   00 00                   add    %al,(%rax)
       6:   00 00                   add    %al,(%rax)
       8:   01 7a 52                add    %edi,0x52(%rdx)
       b:   00 01                   add    %al,(%rcx)
       d:   78 10                   js     1f <.eh_frame+0x1f>
       f:   01 1b                   add    %ebx,(%rbx)
      11:   0c 07                   or     $0x7,%al
      13:   08 90 01 00 00 1c       or     %dl,0x1c000001(%rax)
      19:   00 00                   add    %al,(%rax)
      1b:   00 1c 00                add    %bl,(%rax,%rax,1)
      1e:   00 00                   add    %al,(%rax)
      20:   00 00                   add    %al,(%rax)
      22:   00 00                   add    %al,(%rax)
      24:   18 00                   sbb    %al,(%rax)
      26:   00 00                   add    %al,(%rax)
      28:   00 45 0e                add    %al,0xe(%rbp)
      2b:   10 86 02 43 0d 06       adc    %al,0x60d4302(%rsi)
      31:   4f 0c 07                rex.WRXB or $0x7,%al
      34:   08 00                   or     %al,(%rax)
            ...
    deng@itcast:~/share/3rd/1static_lib$ 
    

    03. objcopy命令

    objcopy工具用于对某种格式的目标文件内容进行转换,输出为另一种格式的目标文件。objcopy使用GNU BFD库读写目标文件,通过这个BFD库,objcopy能够以一种不同与源目标文件的格式来生成目标文件。

    objcopy通过访问BFD库中描述的所有格式的目标文件来识别大部分可执行文件的格式。例如,指定"srec"的输出目标格式(使用 -O srec),objcopy就能够生成S-records格式的目标文件。如果指定"binary"的输出目标格式(使用-O binary)。objcopy能够生成原始的二进制文件,即通常所说的image文件。当objcopy生成一个原始的二进制文件时,它必然会产生输入目标文件内容的一个内存信息存储。所有的符号和重定位信息将被丢弃,且内存信息转储将从已经复制到输出文件的最底端的虚拟地址开始。当生成S-record或原始二进制文件时,使用-S有助于objcopy工具取出元文件中包含的调试信息。在某系情况下,-R可以用于去除二进制文件并不需要的信息。

    deng@itcast:~/share/3rd/1static_lib$ objcopy --help
    用法:objcopy [选项] 输入文件 [输出文件]
     复制二进制文件,可能在此过程中进行变换
     选项为:
      -I --input-target <bfdname>      假设输入文件格式为bfdname
      -O --output-target <bfdname>     建立格式为bfdname的输出文件
      -B --binary-architecture <arch>  当输入为二进制文件的时候,指定输出的架构
      -F --target <bfdname>            设定输入和输出文件格式为bdfname
         --debugging                   如果有可能,转换调试信息
      -p --preserve-dates              保留修改 访问输出的时间戳
      -D --enable-deterministic-archives
                                       Produce deterministic output when stripping archives (default)
      -U --disable-deterministic-archives
                                       Disable -D behavior
      -j --only-section <name>         只复制名称为name的节到输出
         --add-gnu-debuglink=<file>    增加.gnu_debuglink节连接到<file>
      -R --remove-section <name>       从输出中删除名为name的节
         --remove-relocations <name>   Remove relocations from section <name>
      -S --strip-all                   不复制源文件中重定位和符号信息
      -g --strip-debug                 不复制元文件中的调试信息
         --strip-dwo                   Remove all DWO sections
         --strip-unneeded              Remove all symbols not needed by relocations
      -N --strip-symbol <name>         不复制符号<name>
         --strip-unneeded-symbol <name>
                                       取出重定位处理不需要的所有符号
         --only-keep-debug             只保留调试符号
         --extract-dwo                 Copy only DWO sections
         --extract-symbol              Remove section contents but keep symbols
         --keep-section <name>         Do not strip section <name>
      -K --keep-symbol <name>          Do not strip symbol <name>
         --keep-file-symbols           Do not strip file symbol(s)
         --localize-hidden             Turn all ELF hidden symbols into locals
      -L --localize-symbol <name>      强制符号name定义为局部的
         --globalize-symbol <name>     Force symbol <name> to be marked as a global
      -G --keep-global-symbol <name>   除了名称为name的符号,其它符号局部化
      -W --weaken-symbol <name>        Force symbol <name> to be marked as a weak
         --weaken                      弱化文件中所有全局符号
      -w --wildcard                    允许在符号比较中使用通配符
      -x --discard-all                 不从源文件中复制非全局符号
      -X --discard-locals              不复制编译器生成的局部符号
      -i --interleave[=<number>]       只从number个字节中复制一份
         --interleave-width <number>   Set N for --interleave
      -b --byte <num>                  Select byte <num> in every interleaved block
         --gap-fill <val>              Fill gaps between sections with <val>
         --pad-to <addr>               Pad the last section up to address <addr>
         --set-start <addr>            Set the start address to <addr>
        {--change-start|--adjust-start} <incr>
                                       Add <incr> to the start address
        {--change-addresses|--adjust-vma} <incr>
                                       Add <incr> to LMA, VMA and start addresses
        {--change-section-address|--adjust-section-vma} <name>{=|+|-}<val>
                                       Change LMA and VMA of section <name> by <val>
         --change-section-lma <name>{=|+|-}<val>
                                       Change the LMA of section <name> by <val>
         --change-section-vma <name>{=|+|-}<val>
                                       Change the VMA of section <name> by <val>
        {--[no-]change-warnings|--[no-]adjust-warnings}
                                       Warn if a named section does not exist
         --set-section-flags <name>=<flags>
                                       Set section <name>'s properties to <flags>
         --set-section-alignment <name>=<align>
                                       Set section <name>'s alignment to <align> bytes
         --add-section <name>=<file>   Add section <name> found in <file> to output
         --update-section <name>=<file>
                                       Update contents of section <name> with
                                       contents found in <file>
         --dump-section <name>=<file>  Dump the contents of section <name> into <file>
         --rename-section <old>=<new>[,<flags>] Rename section <old> to <new>
         --long-section-names {enable|disable|keep}
                                       Handle long section names in Coff objects.
         --change-leading-char         Force output format's leading character style
         --remove-leading-char         Remove leading character from global symbols
         --reverse-bytes=<num>         Reverse <num> bytes at a time, in output sections with content
         --redefine-sym <old>=<new>    Redefine symbol name <old> to <new>
         --redefine-syms <file>        --redefine-sym for all symbol pairs 
                                         listed in <file>
         --srec-len <number>           Restrict the length of generated Srecords
         --srec-forceS3                Restrict the type of generated Srecords to S3
         --strip-symbols <file>        -N for all symbols listed in <file>
         --strip-unneeded-symbols <file>
                                       --strip-unneeded-symbol for all symbols listed
                                         in <file>
         --keep-symbols <file>         -K for all symbols listed in <file>
         --localize-symbols <file>     -L for all symbols listed in <file>
         --globalize-symbols <file>    --globalize-symbol for all in <file>
         --keep-global-symbols <file>  -G for all symbols listed in <file>
         --weaken-symbols <file>       -W for all symbols listed in <file>
         --add-symbol <name>=[<section>:]<value>[,<flags>]  Add a symbol
         --alt-machine-code <index>    Use the target's <index>'th alternative machine
         --writable-text               Mark the output text as writable
         --readonly-text               Make the output text write protected
         --pure                        Mark the output file as demand paged
         --impure                      Mark the output file as impure
         --prefix-symbols <prefix>     Add <prefix> to start of every symbol name
         --prefix-sections <prefix>    Add <prefix> to start of every section name
         --prefix-alloc-sections <prefix>
                                       Add <prefix> to start of every allocatable
                                         section name
         --file-alignment <num>        Set PE file alignment to <num>
         --heap <reserve>[,<commit>]   Set PE reserve/commit heap to <reserve>/
                                       <commit>
         --image-base <address>        Set PE image base to <address>
         --section-alignment <num>     Set PE section alignment to <num>
         --stack <reserve>[,<commit>]  Set PE reserve/commit stack to <reserve>/
                                       <commit>
         --subsystem <name>[:<version>]
                                       Set PE subsystem to <name> [& <version>]
         --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]
                                       Compress DWARF debug sections using zlib
         --decompress-debug-sections   Decompress DWARF debug sections using zlib
         --elf-stt-common=[yes|no]     Generate ELF common symbols with STT_COMMON
                                         type
         --verilog-data-width <number> Specifies data width, in bytes, for verilog output
      -M  --merge-notes                Remove redundant entries in note sections
          --no-merge-notes             Do not attempt to remove redundant notes (default)
      -v --verbose                     List all object files modified
      @<file>                          Read options from <file>
      -V --version                     Display this program's version number
      -h --help                        Display this output
         --info                        List object formats & architectures supported
    objcopy:支持的目标: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 pei-i386 pei-x86-64 elf64-l1om elf64-k1om 
    elf64-little elf64-big elf32-little elf32-big pe-x86-64 pe-bigobj-x86-64 pe-i386 srec symbolsrec verilog tekhex 
    binary ihex plugin
    将 bug 报告到 <http://www.sourceware.org/bugzilla/>
    deng@itcast:~/share/3rd/1static_lib$ 
    

    3.1 生成纯二进制文件

    deng@itcast:~/test$ gcc test.c -o test
    deng@itcast:~/test$ objcopy test -O binary test_bindata
    
    # 仅包含机器码和数据
    deng@itcast:~/test$ file test_bindata 
    test_bindata: data
    deng@itcast:~/test$ 
    
    

    3.2 生成S-record格式的文件

    deng@itcast:~/test$ objcopy test -O srec test_srec
    deng@itcast:~/test$ file test_srec 
    test_srec: Motorola S-Record; binary data in text format
    deng@itcast:~/test$ 
    
    

    3.3 更改部分输出文件的信息

    # -S选项表示不复制重定位和符号信息 生成去掉符号后的可执行文件 与strip类似
    deng@itcast:~/test$ objcopy test -S test_stripped
    deng@itcast:~/test$ nm test_stripped 
    nm: test_stripped:无符号
    deng@itcast:~/test$ 
    
    

    3.4 指定要删除的段

    # 删除了数据段的可执行文件
    deng@itcast:~/test$ objcopy test -R .data test_removed
    deng@itcast:~/test$ ./test_removed 
    hello world
    deng@itcast:~/test$ 
    

    3.5 应用示例

    #include <stdio.h>
    
    int bss_arrary[1024 * 1024] = {0};
    
    int main(void)
    {
        printf("hello world\n");
    
        return 0;
    }
    

    编译之后的代码

    deng@itcast:~/test$ gcc test.c -o test
    deng@itcast:~/test$ size test
       text    data     bss     dec     hex filename
       1565     600 4194336 4196501  400895 test
    deng@itcast:~/test$ 
    deng@itcast:~/test$ ls -lh test
    -rwxrwxr-x 1 deng deng 17K 6月  18 22:31 test
    deng@itcast:~/test$ 
    
    # 使用strip去掉符号 
    deng@itcast:~/test$ strip test -o test_strip
    deng@itcast:~/test$ ls -lh test test_strip
    -rwxrwxr-x 1 deng deng 17K 6月  18 22:31 test
    -rwxrwxr-x 1 deng deng 15K 6月  18 22:32 test_strip
    deng@itcast:~/test$ 
    
    deng@itcast:~/test$ objcopy -R .comment -R .note.ABI-tag -R .gnu.version test test1
    deng@itcast:~/test$ ls -lh test test1
    -rwxrwxr-x 1 deng deng 17K 6月  18 22:31 test
    -rwxrwxr-x 1 deng deng 16K 6月  18 22:34 test1
    deng@itcast:~/test$ 
    
    

    04. 总结

    GCC二进制工具中,ar用于生成归档文件,readelf、string、nm、objdump属于信息获取工具,strip、objcopy属于目标文件转换工具。

    05. 附录

    5.1 【Linux】GCC程序开发工具(上)
    5.2 【Linux】GCC程序开发工具(中)
    5.3 【Linux】GCC程序开发工具(下)

    展开全文
  • Java Base64与图片互转操作测试

    千次阅读 2018-07-25 14:08:45
    在Java1.8中我们已经可以直接使用sun.misc.BASE64Decoder和sun.misc....bQtqY4302QHjeaX6O4cC3kfJMEjrlLdDLLVmaAtIG/gFmoIGnJU2XRw49xiqmWUzXDAw3YSQnfmg e2Qx4IIJ0Bz00KlduMcE81I0YA+0HQ7xJP4lR+9yG2tdW00WTMAHvHEA6...

    在Java1.8中我们已经可以直接使用sun.misc.BASE64Decoder和sun.misc.BASE64Encoder的Base64工具类了,再也不用满世界地去找jar包了,这也是Oracle(Sun)公司Java开发团队给我们提供的便利。

    编写一个工具类

    package com.boonya.base64;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    import java.io.*;
    /**
     * @ClassName: Base64ImageUtils
     * @Description: TODO(Base64与图片互转)
     * @author: pengjunlin
     * @company: ******科技有限公司
     * @date 2018-07-25
     */
    public class Base64ImageUtils {
    
        /**
         * 将base64编码字符串转换为图片
         * @param base64Code
         * @param outputPath
         * @return
         */
        public static boolean generateImage(String base64Code, String outputPath) {
            if (base64Code == null)
                return false;
                BASE64Decoder decoder = new BASE64Decoder();
            try {
                    // 解密
                    byte[] b = decoder.decodeBuffer(base64Code);
                    // 处理数据
                    for (int i = 0; i < b.length; ++i) {
                        if (b[i] < 0) {
                             b[i] += 256;
                        }
                     }
                    OutputStream out = new FileOutputStream(outputPath);
                    out.write(b);
                    out.flush();
                    out.close();
                    return true;
            } catch (Exception e) {
                 return false;
            }
        }
    
        /**
         * 根据图片地址转换为base64编码字符串
         * @param imagePath
         * @return
         */
        public static String getBase64Code(String imagePath) {
            InputStream inputStream = null;
            byte[] data = null;
            try {
                inputStream = new FileInputStream(imagePath);
                data = new byte[inputStream.available()];
                inputStream.read(data);
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 加密
            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(data);
        }
    
    }
    

    编写一个测试类

    package com.boonya.base64;
    
    /**
     * @ClassName: Base64Test
     * @Description: TODO(功能描述)
     * @author: pengjunlin
     * @company: ******科技有限公司
     * @date 2018-07-25
     */
    public class Base64Test {
    
        /**
         * 主函数入口
         * @param args
         */
        public static void main(String[] args) {
            String base64Code = Base64ImageUtils.getBase64Code("C:\\Users\\Administrator\\Desktop\\ocr01.jpeg");
            System.out.println(base64Code);
            Base64ImageUtils.generateImage(base64Code, "C:\\Users\\Administrator\\Desktop\\ocr00.jpeg");
        }
    }
    

    测试结果展示

    Base64Code(你拿到下面这一串支付可以在任何系统中还原为一副美女图片):

    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
    PaHHUA+ywexo4Nb9Ft5pHKSD/9k=
    

     拿到Base64串设置对应的格式就可以转化为对应的图像了:

    http://imgbase64.duoshitong.com/

     :

     

     根据Base64Code生成的图片如下图所示:

     注:一般跨系统调用图片或者需要保存图片数据可以采用Base64的方式来实现。

    展开全文
  • 一 排他网关 第一步:设计流程图,使用排他网管 ... ProcessEngine pe = ProcessEngines.getDefaultProcessEngine(); /** * 部署流程定义 */ @Test public void test1() { DeploymentBuilder d
  • FindWin10Old32ExE

    2021-04-08 00:25:53
    import pefile exe_exception = open("exe_exception", "a") exe_32 = open("exe_32", "a") for root, dirs, files in os.walk(r"C:\\Windows"): for file in files: #print(root) fullname = os.p
  • 转自:http://hi.baidu.com/xiangzifengshi/blog/item/06081a1b4302a6c5a6866944.html 求二叉树中节点的最大距离 《编程之美》3.8 解法: 考虑到二叉树本身具有递归结构,因此考虑递归求解。 考虑其中任意一...
  • 题 目: 基于PE的基金定投策略研究 学 院: 经济管理学院 专业班级: 投资171 姓 名: 徐慰东 学 号: 20171331 指导教师: 刘丽 / 王玲玲 职 称: 副教授 / 讲师 二〇二一 年 五 月 摘 要 从2005年开始,基金定投...
  • code

    2008-07-23 11:36:00
    http://homepage1.nifty.com/glass/tom_neko/web/web_03.html## EUC-JIS-2004 (JIS X 0213:2004 Appendix 3) vs Unicode mapping table## ## Date: 13 May 2006## License:## Copyright (C) 2001 earthian@
  • PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名。 先找一个第二次实验生成的,没有加壳的木马,其检测结果如下 使用UPX加壳后,...
  • 漫游Kafka实现篇之分布式

    万次阅读 2015-03-18 21:58:33
    统计mysqlcluster所需的内存大小统计mysqlcluster所需的内存大小 统计mysqlcluster所需的内存大小统计mysqlcluster所需的内存大小 统计mysqlcluster所需的内存大小统计mysqlcluster所需的内存大小 ...
  • 如何配置基于mysql的apache2用户认证求教如何配置基于mysql的apache2用户认证求教 DateTimePicker下拉画面能否做到默认是选择月的方式 如何配置基于mysql的apache2用户认证求教如何配置基于mysql的apache2用户认证...
  • 微信小程序——mock.js模拟后台交互

    万次阅读 2018-01-22 11:07:39
    1下载mock.js (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === '...
  • 电子设计之国赛准备-----(前言)

    千次阅读 2017-08-15 23:18:48
    -PE4302 程控衰减器(衰减信号用) -周立功键盘 (输入设备) -自制键盘 (输入设备) 使用F1的32自制的芯片来控制键盘包括编码器等等,比周立功人性化的多,而且美观。 -最小系统板(MCU这个不用说) 我们...
  • File nio操作转载

    2018-09-07 17:39:33
    博客 学院 下载 图文课 TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat     写博客 发Chat 传资源 原 java7 NIO2(4) 文件和目录...文件和目录操作API,跟原来FILE ...
  • rainmeter天气插件的原理是用爬虫抓取一个天气网页然后用自带的那一套正则表达式匹配出天气信息 在国外官网社区下载的插件的天气信息城市都会出现问题(因为插件作者又不知道你在哪),解决方法是在原基础上纠正城市...

空空如也

空空如也

1 2 3 4 5 6
收藏数 103
精华内容 41
关键字:

pe4302