国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 操作系統(tǒng) > 正文

鏈接腳本使用----- 將二進(jìn)制文件作為一個段

2024-06-28 13:27:23
字體:
供稿:網(wǎng)友
鏈接腳本使用----- 將二進(jìn)制文件作為一個段

在分析linux內(nèi)核編譯流程的時候,看到arch/arm/boot/comPRessed/piggy.gzip.S將壓縮后的Linux內(nèi)核(arch/arm/boot/compressed/piggy.gzip)包含進(jìn)來:

   1: .section .piggydata,#alloc
   2: .globl    input_data
   3: t_data:
   4: .incbin    "arch/arm/boot/compressed/piggy.gzip"
   5: .globl    input_data_end
   6: t_data_end:

 

我們是不是也可以利用這種方法將一副圖片作為可執(zhí)行程序的一個段,然后再程序中訪問這個段來達(dá)到顯示圖片的目的?下面是我的做法:

image

仿照piggy.gzip.S實(shí)現(xiàn)demo.S:

   1: .section .peng
   2: .incbin "./logo.jpg"

main.c

   1: #include <stdio.h>
   2:  
   3: extern unsigned int __peng_start;
   4: extern unsigned int __peng_end;
   5:  
   6: char *p = (char *)(&__peng_start);
   7: //我們要獲取__peng_start的存放地址,作為字符串首地址,或者數(shù)組名來使用。
   8: int main(int argc, const char *argv[])
   9: {
  10:     int i;
  11:     unsigned int len = 0;
  12:  
  13:     len = (unsigned int)(&__peng_end) - (unsigned int)(&__peng_start);
  14:  
  15:     printf("len = %x/n", len);
  16:  
  17:     printf("%p/n", &__peng_start);
  18:     printf("%p/n", &__peng_end);
  19:  
  20:     for(i=0; i<len; i++)
  21:     {
  22:         if (i % 16 == 0)
  23:         {
  24:             printf("/n");
  25:         }
  26:         printf("%3x ", *p++&0xff);
  27:     }
  28:  
  29:  
  30:     return 0;
  31: }

Makefile

   1: CC=gcc -Wall
   2:  
   3: main:main.o demo.o
   4:     $(CC) $^ -Tload.lds -o $@
   5:  
   6: main.o:main.c
   7:  
   8: demo.o:demo.S
   9:  
  10:  
  11: clean:
  12:     $(RM) *.o main

load.lds

   1: OUTPUT_FORMAT("elf32-i386", "elf32-i386",
   2:           "elf32-i386")
   3: OUTPUT_ARCH(i386)
   4: ENTRY(_start)
   5: SEARCH_DIR("/usr/i486-linux-gnu/lib32"); SEARCH_DIR("/usr/local/lib32"); SEARCH_DIR("/lib32"); SEARCH_DIR("/usr/lib32"); SEARCH_DIR("/usr/i486-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
   6: SECTIONS
   7: {
   8:   /* Read-only sections, merged into text segment: */
   9:   PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS;
  10:   .interp         : { *(.interp) }
  11:   .note.gnu.build-id : { *(.note.gnu.build-id) }
  12:   .hash           : { *(.hash) }
  13:   .gnu.hash       : { *(.gnu.hash) }
  14:   .dynsym         : { *(.dynsym) }
  15:   .dynstr         : { *(.dynstr) }
  16:   .gnu.version    : { *(.gnu.version) }
  17:   .gnu.version_d  : { *(.gnu.version_d) }
  18:   .gnu.version_r  : { *(.gnu.version_r) }
  19:   .peng :

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 体育| 阳东县| 克拉玛依市| 刚察县| 海门市| 兴山县| 莱西市| 镇康县| 大城县| 颍上县| 屏山县| 康平县| 榆社县| 横峰县| 孙吴县| 读书| 札达县| 陆河县| 常熟市| 得荣县| 宁武县| 罗定市| 唐海县| 临桂县| 忻城县| 屯留县| 朝阳市| 祁东县| 石屏县| 筠连县| 石狮市| 广安市| 忻城县| 文昌市| 淳化县| 雷山县| 晋城| 河曲县| 河曲县| 游戏| 那曲县|