- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在从事一个大型项目,该项目涉及编写一个 Perl 脚本来转换程序集文件,我正在尝试确定转换后的程序集文件的外观,以及编译它们的过程。我一直无法让一个简单的例子起作用。我从一个简单的程序 fib.c 开始。我编译了它,然后添加了一个名为 springboard 的部分。
.file "fib.c"
.text
.globl fib
.type fib, @function
fib:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
pushl %ebx
subl $20, %esp
cmpl $0, 8(%ebp)
jne .L2
.cfi_offset 3, -12
movl $1, %eax
jmp .SB1
.LBL1:
jmp .L3
.L2:
cmpl $1, 8(%ebp)
jne .L4
movl $1, %eax
jmp .SB2
.LBL2:
jmp .L3
.L4:
movl 8(%ebp), %eax
subl $1, %eax
movl %eax, (%esp)
call fib
movl %eax, %ebx
movl 8(%ebp), %eax
subl $2, %eax
movl %eax, (%esp)
call fib
addl %ebx, %eax
.L3:
addl $20, %esp
popl %ebx
.cfi_restore 3
popl %ebp
.cfi_def_cfa 4, 4
.cfi_restore 5
ret
.cfi_endproc
.LFE0:
.size fib, .-fib
.section .rodata
.LC0:
.string "Usage: fib <n>\n"
.LC1:
.string "f(%d) = %d\n"
.text
.globl main
.type main, @function
main:
.LFB1:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
andl $-16, %esp
subl $32, %esp
cmpl $2, 8(%ebp)
je .L6
movl stderr, %eax
movl %eax, %edx
movl $.LC0, %eax
movl %edx, 12(%esp)
movl $15, 8(%esp)
movl $1, 4(%esp)
movl %eax, (%esp)
call fwrite
movl $1, (%esp)
call exit
.L6:
movl 12(%ebp), %eax
addl $4, %eax
movl (%eax), %eax
movl %eax, (%esp)
call atoi
movl %eax, 24(%esp)
movl 24(%esp), %eax
movl %eax, (%esp)
call fib
movl %eax, 28(%esp)
movl $.LC1, %eax
movl 28(%esp), %edx
movl %edx, 8(%esp)
movl 24(%esp), %edx
movl %edx, 4(%esp)
movl %eax, (%esp)
call printf
movl $0, (%esp)
call exit
.cfi_endproc
.LFE1:
.size main, .-main
.section .springboard,"ax",@progbits
.SB2:
jmp .LBL2
.SB1:
jmp .LBL1
.LFE2:
.size .springboard, .-.springboard
.ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
.section .note.GNU-stack,"",@progbits
我使用这些命令进一步编译它:
as -o fib.o fib.S -32
ld -melf_i386 -o fib -dynamic-linker /lib/ld-linux.so.2 /usr/lib32/crt1.o /usr/lib32/crti.o fib.o -lc /usr/lib32/crtn.o script.ld
我遇到问题的部分是 GNU 链接描述文件。我希望能够将跳板部分放在特定的内存地址。这是脚本:
OUTPUT_FORMAT(elf32-i386)
ENTRY(main)
SB_START = 0x08148508;
SECTIONS
{
. = SB_START;
.springboard : { *(.springboard) }
}
我已经坚持了一段时间并尝试了一些不同的东西,我对链接描述文件还很陌生,所以这对你们中的一些人来说可能很容易。
使用 objdump -x fib
查看没有链接器脚本的部分
Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 00000013 08048114 08048114 00000114 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.ABI-tag 00000020 08048128 08048128 00000128 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .hash 00000038 08048148 08048148 00000148 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .dynsym 00000090 08048180 08048180 00000180 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .dynstr 00000064 08048210 08048210 00000210 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .gnu.version 00000012 08048274 08048274 00000274 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .gnu.version_r 00000020 08048288 08048288 00000288 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .rel.dyn 00000010 080482a8 080482a8 000002a8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .rel.plt 00000030 080482b8 080482b8 000002b8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .init 00000024 080482e8 080482e8 000002e8 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
10 .plt 00000070 08048310 08048310 00000310 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .text 00000188 08048380 08048380 00000380 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .springboard 0000000a 08048508 08048508 00000508 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .fini 00000015 08048514 08048514 00000514 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
14 .rodata 00000024 0804852c 0804852c 0000052c 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
15 .eh_frame 000000e0 08048550 08048550 00000550 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
16 .dynamic 000000c8 08049630 08049630 00000630 2**2
CONTENTS, ALLOC, LOAD, DATA
17 .got 00000004 080496f8 080496f8 000006f8 2**2
CONTENTS, ALLOC, LOAD, DATA
18 .got.plt 00000024 080496fc 080496fc 000006fc 2**2
CONTENTS, ALLOC, LOAD, DATA
19 .data 00000004 08049720 08049720 00000720 2**2
CONTENTS, ALLOC, LOAD, DATA
20 .bss 00000004 08049724 08049724 00000724 2**2
ALLOC
21 .comment 0000002a 00000000 00000000 00000724 2**0
CONTENTS, READONLY
然后使用脚本:
Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 00000013 08048134 08048134 00000134 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.ABI-tag 00000020 08048148 08048148 00000148 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .hash 00000038 08048168 08048168 00000168 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .dynsym 00000090 080481a0 080481a0 000001a0 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .dynstr 00000064 08048230 08048230 00000230 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .gnu.version 00000012 08048294 08048294 00000294 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .gnu.version_r 00000020 080482a8 080482a8 000002a8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .rel.dyn 00000010 080482c8 080482c8 000002c8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .rel.plt 00000030 080482d8 080482d8 000002d8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .init 00000024 08048308 08048308 00000308 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
10 .plt 00000070 08048330 08048330 00000330 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .text 00000188 080483a0 080483a0 000003a0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .fini 00000015 08048528 08048528 00000528 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .rodata 00000024 08048540 08048540 00000540 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
14 .eh_frame 000000e0 08048564 08048564 00000564 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
15 .dynamic 000000c8 08049644 08049644 00000644 2**2
CONTENTS, ALLOC, LOAD, DATA
16 .got 00000004 0804970c 0804970c 0000070c 2**2
CONTENTS, ALLOC, LOAD, DATA
17 .got.plt 00000024 08049710 08049710 00000710 2**2
CONTENTS, ALLOC, LOAD, DATA
18 .data 00000004 08049734 08049734 00000734 2**2
CONTENTS, ALLOC, LOAD, DATA
19 .bss 00000004 08049738 08049738 00000738 2**2
ALLOC
20 .comment 0000002a 00000000 00000000 00001512 2**0
CONTENTS, READONLY
21 .springboard 0000000a 08148508 08148508 00001508 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
我很想了解更多关于我可以用链接描述文件做什么以及如何做的信息。我已经阅读了其他问题和教程,但仍然很困惑。我不完全了解所有部分是什么以及它们应该去哪里,我想我会从一些简单的东西开始并添加一个,但我可能会更详细地了解事情以使其发挥作用。关于如何修复我的链接描述文件的任何想法?关于这个主题,我还需要了解什么?谢谢!
在 Ubuntu 机器上工作,我只专注于 32 位程序。
最佳答案
您确实提到了 GNU linker manual ?第 3 章确实解释了链接描述文件。不过,它不会赢得任何最佳手册奖。 :)
您看到的部分是各种数据(.data、.bss、.rodata)和代码(.text、.init、.fini)部分。更多详情 here .也可以尝试用谷歌搜索部分名称。
关于c - 如何使用链接描述文件指定特定部分的内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962775/
在一个环境中,我有 pandas 版本 0.17.0 和 numpy 版本 1.10.1。在另一个环境中,我有 pandas 版本 0.18.1 和 numpy 版本 1.10.4。 我运行这段代码
This question already has answers here: Default stringify for objects, equivalent to Java's toString
我一直在尝试为我的profile命令嵌入设置一个人们可以更改的简历。我认为它应该有效,但我的代码似乎有问题。 相关代码如下: const PREFIX = '!'; var bio = {}; cli
我正在尝试获取网站图标、网站标题和外部 URL 列表的描述,最好使用 jquery。我已经成功地为我的网址同步了谷歌的图标服务,任何人都可以阐明如何实现网站标题和描述吗?这是我到目前为止获得图标的内容
我在尝试运行代码时收到错误。找不到问题出在哪里。我可能遗漏了一些小细节,如果您能纠正它那就太好了。 计算Servlet import java.io.IOException; impo
我的数据库中有两个字段,一个是描述(TEXT),另一个是short_desc(VARCHAR-200)。 当我显示搜索结果时,我显然使用了short_desc,当有人点击该项目时,他们会得到完整的描述
当我尝试通过ajax和Jquery调用 Controller 上的save方法时,我正在使用Spring MVC、Jquery、Hibernate和tomcat。单击“保存”按钮时,我在 tomcat
我试图使用describe()来获取一些描述性统计数据,但获取了应该是数字的nan值。 我尝试使用 axis=0 或 axis=1,而 axis=1 产生了正确的数值,但这不是正确的数值我需要; ax
我有超过 1 亿个字符串要存储在文件系统中。与字符串 (~255Chars utf8) 一起,将有两个日期和一些定义其属性的整数值。 我可以将它们放在一个 CSV 文件中,但它会很大。我可以将几个较小
有没有办法将 JavaScript 合并到 Jenkins 顶部的描述字段中? 每当我添加脚本标签时,当您查看源代码时,它都会被 Jenkins 删除。 如果有人有建议或方向指出我,那就太好了。
您如何获得 SEH 的名称和/或描述?异常无需必须将字符串硬编码到您的应用程序中? 我尝试使用 FormatMessage(),但它有时会截断消息,即使您指定忽略插入也是如此: __asm { //
如果我在 MySQL 中使用 CREATE TRIGGER 语法创建一个触发器,我该如何附加注释来描述它?我的意思是在声明中或之后对我来说是一样的。 我想不通。对于表格,您可以在声明末尾添加 COMM
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
当开发多媒体应用或者游戏应用的时候,需要使用音量控制键来设置程序的音量大小。在Android系统中有多中音频流,通过Activity中的函数 setVolumeControlStream(int s
Slick DSL 允许通过两种方式在表中创建可选字段。 对于这个案例类: case class User(id: Option[Long] = None, fname: String, lname:
如果不属于默认命名空间,我如何描述 pod 信息。使用默认命名空间我没有任何问题。 但我想获得与命名空间对齐的特定 pod 的信息。 但是,当我想描述我可以制作的同一个 pod 时,请参阅 我尝试使用
在我使用过的几乎所有 vim 副本中,程序都会在替换文本后给出更改的描述。 (例如,将显示类似“20 行 92 个替换”之类的内容。) 我现在正在使用默认情况下不这样做的 vim 副本。 是否有一个简
我正在编写规范,需要描述一些 JSON 对象。单独的文本和选项卡往往会使大型 JSON 变得过于困惑。是否有任何在线(最好)工具可以创建类似于 http://www.json.org/ 上的图表的工具
我正在尝试通过 DNS 将我的 Kubernetes 部署连接在一起。 我有一个 Java (Spring Boot) 部署和一个 javascript (node.js) 部署,两者都通过默认的 C
我只是在学习 WebGL 图形编程。 我正在检查包含该语句的某人的代码 // multiply the position by the matrix. gl_Position = vec4((u_ma
我是一名优秀的程序员,十分优秀!