当前位置: 首页 > news >正文

汕头网站建设技术托管wordpress返回上一个页面

汕头网站建设技术托管,wordpress返回上一个页面,wordpress评论邮件回复插件,外贸平台找外贸公司一位朋友最近遇到一个棘手的问题#xff0c;希望把共享库(SO)加载到指定的内存地址#xff0c;目的可能是想通过prelink来加快应用程序的起动速度。他问我有没有什么方法。我知道Windows下是可以的#xff0c;比如在VC6里设置/base的值就行了#xff0c;所以相信在linux下也…一位朋友最近遇到一个棘手的问题希望把共享库(SO)加载到指定的内存地址目的可能是想通过prelink来加快应用程序的起动速度。他问我有没有什么方法。我知道Windows下是可以的比如在VC6里设置/base的值就行了所以相信在linux下也是可行的。 VC有编译选项可以设置猜想gcc也应该有吧。gcc本身只是一个外壳链接工作是由于ld完成的当然是应该去阅读ld命令行选项文档。很快发现ld有个—image-base选项可以设置动态库的加载地址。 通过Xlinker把这个参数传递给ld但是ld不能识别这个选项 gcc -g -shared test.c -Xlinker --image-base -Xlinker 0x00c00000 -o libtest.so /usr/bin/ld: unrecognized option --image-base /usr/bin/ld: use the --help option for usage information collect2: ld returned 1 exit statu s 再仔细看手册原来这个选项只适用于PE文件PE文件是Windows下专用的在linux下自然用不了看来得另想办法。 我知道ld script可以控制ld的行为于是研究ld script的写法按照手册里的说明写了一个简单的ld script: SECTIONS      {        . 0x00c00000;        .text : { *(.text) }        .data : { *(.data) }        .bss : { *(.bss) }      } 按下列方式编译 gcc -shared -g -Xlinker --script -Xlinker ld.s test.c -o libtest.so gcc -g main.c -L./ -ltest -o test.exe 用ldd查看加载地址正确。 [rootlocalhost lds]# ldd test.exe linux-gate.so.1   (0x00aff000) libtest.so ./libtest.so (0x00c00000) libc.so.6 /lib/libc.so.6 (0x007fa000) /lib/ld-linux.so.2 (0x007dd000) 但运行时会crash: [rootlocalhost lds]# ./test.exe Segmentation fault 调试运行可以发现 (gdb) r Starting program: /work/test/lds/test.exe Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0x452000 Program received signal SIGSEGV, Segmentation fault. 0x007e7a10 in _dl_relocate_object () from /lib/ld-linux.so.2 (gdb) bt #0  0x007e7a10 in _dl_relocate_object () from /lib/ld-linux.so.2 #1  0x007e0833 in dl_main () from /lib/ld-linux.so.2 #2  0x007f056b in _dl_sysdep_start () from /lib/ld-linux.so.2 #3  0x007df48f in _dl_start () from /lib/ld-linux.so.2 #4  0x007dd847 in _start () from /lib/ld-linux.so.2 猜想可能是ld.s写得不全导致一些信息不正确。于是用ld –verbose导出一个默认的ld script。不出所料默认的ld script非常冗长下面是开头一段 /* Script for -z combreloc: combine and sort reloc sections */ OUTPUT_FORMAT(elf32-i386, elf32-i386,           elf32-i386) OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR(/usr/i386-redhat-linux/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SECTIONS {   /* Read-only sections, merged into text segment: */   PROVIDE (__executable_start 0x08048000); . 0x08048000 SIZEOF_HEADERS;   .interp         : { *(.interp) }   .hash           : { *(.hash) }   .dynsym         : { *(.dynsym) }   .dynstr         : { *(.dynstr) }   .gnu.version    : { *(.gnu.version) }   .gnu.version_d  : { *(.gnu.version_d) }   .gnu.version_r  : { *(.gnu.version_r) }   按照ld script的语法我把它修改为(红色部分为新增行) /* Script for -z combreloc: combine and sort reloc sections */ OUTPUT_FORMAT(elf32-i386, elf32-i386,           elf32-i386) OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR(/usr/i386-redhat-linux/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SECTIONS {   /* Read-only sections, merged into text segment: */   PROVIDE (__executable_start 0x08048000); . 0x08048000 SIZEOF_HEADERS;   . 0x00c00000;   .interp         : { *(.interp) }   .hash           : { *(.hash) }   .dynsym         : { *(.dynsym) }   .dynstr         : { *(.dynstr) }   .gnu.version    : { *(.gnu.version) }   .gnu.version_d  : { *(.gnu.version_d) }   .gnu.version_r  : { *(.gnu.version_r) }   用这个ld script再次测试一切正常。又验证多个共享库的情况也正常下面是测试数据 test.c int test(intn) {     returnn; } test1.c inttest1(intn) {     returnn; } main.c externinttest(intn); externinttest1(intn); #include stdio.h   intmain(intargc, char* argv[]) {     printf(Hello: %d %d/n, test(100), test1(200));       getchar();     return 0; } Makefile all:     gcc -shared -g -Xlinker --script -Xlinker ld.s test.c -o libtest.so     gcc -shared -g -Xlinker --script -Xlinker ld1.s test1.c -o libtest1.so     gcc -g main.c -L./ -ltest -ltest1 -o test.exe   clean:     rm -f *.so *.exe libtest.so的加载地址为0x00c00000 libtest1.so的加载地址为0x00d00000 ldd显示结果 linux-gate.so.1   (0x00aa3000)         libtest.so ./libtest.so (0x00c00000)         libtest1.so ./libtest1.so (0x00d00000)         libc.so.6 /lib/libc.so.6 (0x007fa000)         /lib/ld-linux.so.2 (0x007dd000) maps的内容为 007dd000-007f6000 r-xp 00000000 03:01 521466     /lib/ld-2.4.so 007f6000-007f7000 r-xp 00018000 03:01 521466     /lib/ld-2.4.so 007f7000-007f8000 rwxp 00019000 03:01 521466     /lib/ld-2.4.so 007fa000-00926000 r-xp 00000000 03:01 523579     /lib/libc-2.4.so 00926000-00929000 r-xp 0012b000 03:01 523579     /lib/libc-2.4.so 00929000-0092a000 rwxp 0012e000 03:01 523579     /lib/libc-2.4.so 0092a000-0092d000 rwxp 0092a000 00:00 0 00c00000-00c01000 r-xp 00001000 03:03 16370      /work/test/ldsex/libtest.so 00c01000-00c02000 rwxp 00001000 03:03 16370      /work/test/ldsex/libtest.so 00cf1000-00cf2000 r-xp 00cf1000 00:00 0          [vdso] 00d00000-00d01000 r-xp 00001000 03:03 16373      /work/test/ldsex/libtest1.so 00d01000-00d02000 rwxp 00001000 03:03 16373      /work/test/ldsex/libtest1.so 08048000-08049000 r-xp 00000000 03:03 16374      /work/test/ldsex/test.exe 08049000-0804a000 rw-p 00000000 03:03 16374      /work/test/ldsex/test.exe b7fdf000-b7fe0000 rw-p b7fdf000 00:00 0 b7fed000-b7ff0000 rw-p b7fed000 00:00 0 bf8db000-bf8f0000 rw-p bf8db000 00:00 0          [stack] 从以上测试结果可以看出这种方法是可行的。
http://www.yutouwan.com/news/43157/

相关文章:

  • 阅文集团旗下哪个网站做的最好wordpress产品筛选
  • 网站建设提议wordpress快速扒站
  • 佛山网站制作建设编程怎么学
  • 网站城市切换代码政务咨询投诉举报网站建设
  • 网站如何做360度全景开发个网站开票名称是什么
  • 上海建筑网站大全自己做的网站用在博客上
  • 深圳龙岗网站制作天津建设工程信息网招标文件澄清
  • 旅行社网站建设方案书wordpress 本地ajax
  • 做搜狗网站优化首页企业咨询管理服务
  • 怎么申请网站域名直接在wordpress官网写博客
  • 网站运营与推广计划书百度搜索风云榜排名
  • 如果是创建的网站国家高新技术企业标志
  • 营销型网站更受用户欢迎的原因是汽车之家汽车报价大全网页版
  • 做网站要看什么书郑州官网制做
  • 代做网站收费标准私密浏览器官网
  • 用来查数据的网站怎么建设企业网站开发项目策划书
  • 男女做那个网站动态图茗哥网站建设
  • WordPress建站教程 网盘互助平台网站建设费用
  • 网站设计师工资怎样2017电商网站建设背景
  • 在网站做淘宝推广新产品营销策划
  • 深圳罗湖网站制作公司网站设计机构排行榜
  • 北京 网站开发网站建设的运作原理
  • 网站建站上海如何拷贝服务器里面网站做备份
  • 怎么选择镇江网站建设国家超算互联网公司排名
  • 免费 网站建设凯里建设网站
  • 做鞋子的网站网络自媒体培训
  • 漳州建设企业网站手机网站设计理念
  • 长沙网站优化诊断山西网络推广哪家专业
  • 如何在网站上做用工登记wordpress时间邀请码
  • 做装修的业务网站expression wordpress主题