亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2425 | 回復(fù): 7
打印 上一主題 下一主題

ld的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-09-20 13:18 |只看該作者 |倒序瀏覽
我寫了一個非常簡單的鏈接器,跟其他*.o鏈接生成了一個可執(zhí)行文件(ELF格式),當(dāng)運行它時,提示“已殺死”,運行環(huán)境:ubuntu

我想請教的是,有什么方法可以單步調(diào)試這個程序?

另,我知道 coredump 是可以獲取一些有用的信息,但不知道是否適用于這里(似乎一般是“段錯誤”才采取這種方式)?不管怎樣,我試了一下(網(wǎng)上提供的方法),如下:

1)ulimit -c unlimited

2)./t_elf      //可執(zhí)行文件名

但上面的方式似乎并不奏效(我也是第一次進(jìn)行這樣的設(shè)置),因為并沒有在當(dāng)前目錄下找到 coredump 文件 。是否我的設(shè)置有誤?

論壇徽章:
0
2 [報告]
發(fā)表于 2013-09-20 13:29 |只看該作者
本帖最后由 landker 于 2013-09-21 14:00 編輯

補充一下,如下:

1)
  1. 代碼1(start.asm):
  2. [BITS        32]
  3. extern        L0
  4. [section .text]
  5. global        _start

  6. _start:
  7.         jmp        $
  8.         .......
復(fù)制代碼
編譯后為: start.o

2)其他的目標(biāo)文件集合假設(shè)為 others.o

3)我自己寫了一個簡單的鏈接器,將1)和2)一起鏈接,

test_ld  -o test start.o others.o

4)加載運行出錯(ubuntu系統(tǒng)提示:已殺死)!

按照正常情況,系統(tǒng)在加載 test 后,整個代碼段都被復(fù)制至起始地址為 0x8048000 的地方,而且第一條執(zhí)行的代碼應(yīng)該是 0x80480bf(即:_start:的第一條語句:jmp $),即執(zhí)行一個死循環(huán)(要手工ctrl+c 退出),但卻提示出錯.....

請教一下各位,到底哪里出錯了?

5)相關(guān)信息如下:
  1. ELF header(readelf -h test):
  2. ELF Header:
  3.   Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  4.   Class:                             ELF32
  5.   Data:                              2's complement, little endian
  6.   Version:                           1 (current)
  7.   OS/ABI:                            UNIX - System V
  8.   ABI Version:                       0
  9.   Type:                              EXEC (Executable file)
  10.   Machine:                           Intel 80386
  11.   Version:                           0x1
  12.   Entry point address:               0x80480bf
  13.   Start of program headers:          52 (bytes into file)
  14.   Start of section headers:          148 (bytes into file)
  15.   Flags:                             0x0
  16.   Size of this header:               52 (bytes)
  17.   Size of program headers:           32 (bytes)
  18.   Number of program headers:         3
  19.   Size of section headers:           40 (bytes)
  20.   Number of section headers:         13
  21.   Section header string table index: 6
復(fù)制代碼
  1. 程序頭(readelf -l test):
  2. Elf file type is EXEC (Executable file)
  3. Entry point 0x80480bf
  4. There are 3 program headers, starting at offset 52

  5. Program Headers:
  6.   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  7.   LOAD           0x00029c 0x08048000 0x08048000 0x008e5 0x008e5 R E 0x1000
  8.   LOAD           0x000b81 0x08049000 0x08049000 0x00013 0x00013 RW  0x1000
  9.   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x1000

  10. Section to Segment mapping:
  11.   Segment Sections...
  12.    00     .text
  13.    01     .data
  14.    02     
復(fù)制代碼
  1. Section 列表(readelf -S test):
  2. There are 13 section headers, starting at offset 0x94:

  3. Section Headers:
  4.   [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  5.   [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  6.   [ 1] .text             PROGBITS        08048000 00029c 0008e5 00  AX  0   0 16
  7.   [ 2] .data             PROGBITS        08049000 000b81 000013 00  WA  0   0  4
  8.   [ 3] .bss              NOBITS          080488f8 000b94 000000 00  WA  0   0  4
  9.   [ 4] .rodata           PROGBITS        080488f8 000b94 0000dc 00   A  0   0  1
  10.   [ 5] .rel.text         REL             080489d4 000c70 000180 08      7   1  4
  11.   [ 6] .shstrtab         STRTAB          08048b54 000df0 00006e 00      0   0  1
  12.   [ 7] .symtab           SYMTAB          08048bc2 000e5e 000510 10      8   8  4
  13.   [ 8] .strtab           STRTAB          080490d2 00136e 0001c5 00      0   1  1
  14.   [ 9] .comment          PROGBITS        08049297 001533 000056 01  MS  0   0  1
  15.   [10] .eh_frame         PROGBITS        080492ed 001589 000294 01   A  0   0  4
  16.   [11] .rel.eh_frame     REL             08049581 00181d 000098 08      7   1  4
  17.   [12] .note.GNU-stack   NOBITS          08049619 0018b5 000000 01  WA  0   0  4
復(fù)制代碼
  1. 代碼反編譯(objdump -s -d --start-address=0x8048000 --stop-address=0x8048100 test):

  2. 080480bf <_start>:
  3. 80480bf:        eb fe                        jmp    80480bf <_start>
  4. .......
復(fù)制代碼

論壇徽章:
0
3 [報告]
發(fā)表于 2013-09-21 13:59 |只看該作者
回復(fù) 2# landker

有人知道嗎?
   

論壇徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
4 [報告]
發(fā)表于 2013-09-22 16:09 |只看該作者
gdb就可以單步指令調(diào)試,
gdb) b *0x80480bf
gdb) r
gdb) info reg
gdb) ni

論壇徽章:
0
5 [報告]
發(fā)表于 2013-09-22 17:15 |只看該作者
EricFisher 發(fā)表于 2013-09-22 16:09
gdb就可以單步指令調(diào)試,
gdb) b *0x80480bf
gdb) r


.....

ld是我寫的,但并沒有加入.debug段(.eh_frame).....

另,如果要加入調(diào)試信息,該然后操作?

論壇徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
6 [報告]
發(fā)表于 2013-09-22 17:18 |只看該作者
本帖最后由 EricFisher 于 2013-09-22 17:22 編輯

這種調(diào)試,gdb不需要.debug信息。

保留調(diào)試信息,需要把原來.o里的調(diào)試信息section連接,并輸出到輸出文件中。

如果elf文件有問題,可能在加載的時候,操作系統(tǒng)就把它殺掉了,這個時候貌似無法在gdb里調(diào)試。

論壇徽章:
0
7 [報告]
發(fā)表于 2013-09-22 17:39 |只看該作者
回復(fù) 6# EricFisher

*.o 也是我編碼生成的.....
   

論壇徽章:
1
綜合交流區(qū)版塊每日發(fā)帖之星
日期:2015-10-14 06:20:00
8 [報告]
發(fā)表于 2013-10-05 07:06 |只看該作者
本帖最后由 fly3ds 于 2013-10-05 07:09 編輯

自己寫個LD,要干什么呢?僅僅是想了解ld的運行原理和過程嗎。我看不如把你寫的這個ld的源程序貼上來,看看能不能直接從源程序看出毛病。

最常見的是segmantation fault時會產(chǎn)生coredump,你這個似乎不屬于這一類,似乎是被什么監(jiān)控進(jìn)程kill -9殺掉了,或者你自己的這個ld把自己kill了?

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP