TL; DR
我试图将这个问题作为一个简短的问题,但这是一个复杂的问题所以它最终会变长.如果您可以回答这方面的任何部分或提供任何建议或提示或资源或任何内容,那将非常有帮助(即使您没有直接解决我的所有问题).我现在正撞在墙上.:)
以下是我遇到的具体问题.请阅读下面的更多信息.
到目前为止我的方法
我正在尝试以特定的[未记录的]专有格式创建一个重定位文件,该格式主要基于ELF.我编写了一个工具,它接受一个ELF文件和一个部分链接文件(PLF)并处理它们以输出完全解析的rel文件.此rel文件用于根据需要加载/卸载数据以节省内存.该平台是一个32位PPC.一个问题是该工具是用c#编写的,但数据是针对PPC的,因此需要注意有趣的endian问题等.
我一直试图了解在用于解析未解析的符号等时如何处理重定位.到目前为止我所做的是从PLF复制相关部分,然后对于每个相应的.rela部分,我解析条目并尝试修复部分数据并根据需要生成新的重定位条目.但这就是我的困难所在.我离开了我的元素,这种事情似乎通常是由链接器和加载器完成的,所以没有很多好的例子可以借鉴.但是我发现了一些有帮助的东西,包括这一个.
所以发生的事情是:
我这样做的全部原因是因为有一个旧的过时不支持的工具不支持使用自定义部分,这是该项目的关键要求(出于内存原因).我们有一个自定义部分,其中包含一堆我们想要在启动后卸载的初始化代码(总计大约一兆).现有工具只是忽略该部分中的所有数据.
因此,虽然制作支持自定义部分的自己的工具是理想的,但如果有任何明智的想法以实现这一目标的另一种方式,我全都耳朵!我们已经提出了将.dtor部分用于我们的数据的想法,因为它几乎是空的.但这很麻烦,如果它阻止干净关闭,可能无论如何都无法工作.
重定位加示例代码
当我处理搬迁,我工作过的公式和信息在ABI文档中发现的HERE(约4.13节,第80ish),以及一些我已经挖出了其他代码示例和博客文章.但是这一切都让人感到困惑,并没有真正拼写出来,而且我发现的所有代码都有所不同.
例如,
所以,当我看到这种代码时,我该如何解读呢?
这是一个例子(来自这个来源)
case ELF::R_PPC64_ADDR14 : {
assert(((Value + Addend) & 3) == 0); …Run Code Online (Sandbox Code Playgroud) 这是我的APC如何运行的链接:[已删除]
正如你所看到的,它很快就会填满,我的Cache Full Count有时会超过1000
我的网站使用Wordpress.
我注意到,每次我发布新帖子或编辑帖子时,都会发生两件事.
1)APC内存"USED"重置2)我得到了很多碎片
我试过给APC提供更多的内存(512 mb),但有时会崩溃,看来384是最好的.我还有一个Cron作业,每4小时重新启动一次apache,清除所有APC片段并使用内存.再说一次,如果APC运行了很长一段时间,我的apache会崩溃,我认为由于片段的堆积.
我应该使用apc.Filters并过滤掉一些不应该缓存的东西吗?
我真的很喜欢这种东西,所以如果有人可以用完整的说明解释,非常感谢你!
我有一些关于堆栈的问题.
按照这个说明,我设法只产生528字节的大小a.out(当gcc main.c最初给我8539字节的大文件时).
main.c是:
int main(int argc, char** argv) {
return 42;
}
Run Code Online (Sandbox Code Playgroud)
但我已经从这个汇编文件中构建了一个a.out:
电源:
; tiny.asm
BITS 64
GLOBAL _start
SECTION .text
_start:
mov eax, 1
mov ebx, 42
int 0x80
Run Code Online (Sandbox Code Playgroud)
有:
me@comp# nasm -f elf64 tiny.s
me@comp# gcc -Wall -s -nostartfiles -nostdlib tiny.o
me@comp# ./a.out ; echo $?
42
me@comp# wc -c a.out
528 a.out
Run Code Online (Sandbox Code Playgroud)
因为我需要机器码:
objdump -d a.out
a.out: file format elf64-x86-64
Disassembly of section .text:
00000000004000e0 <.text>:
4000e0: b8 01 00 00 00 mov $0x1,%eax …Run Code Online (Sandbox Code Playgroud) 我正在阅读一些关于英特尔操作码汇编指令的资料,但我无法理解它遵循操作码字节是什么意思.例如:"cw","cd","/ 2","cp","/ 3".请给我一个提示是什么意思或在哪里可以找到完整的参考?提前致谢!
E8 cw CALL rel16相对于下一条指令调用near,relative,displacement
E8 cd CALL rel32相对于下一条指令调用near,relative,displacement
FF / 2 CALL r/m16调用r/m16中给出的接近绝对间接地址
FF / 2 CALL r/m32调用r/m32中给出的接近绝对间接地址
9A cd CALL ptr16:16调用操作数中给出的far,absolute,address
9A cp CALL ptr16:32调用操作数中给出的far,absolute,address
FF / 3 CALL m16:16调用m16:16中给出的远,绝对间接地址
FF / 3 CALL m16:32调用m16:32中给出的远,绝对间接地址
IDM表示,如果EBP用作基址寄存器,则内存操作使用SS段.其结果是,[ebp + esi]和[esi + ebp]引用SS和DS的段,分别.参见NASM的文档:3.3有效地址.
另外,在上述相同的部分,NASM提到如何通过替换以产生更短的机器代码[eax*2]与[eax+eax].
然而,NASM还生成[ebp + ebp]用于[ebp*2](即没有碱寄存器).
我怀疑[ebp+ebp]引用SS段,并[ebp*2]引用DS段.
我问NASM这个问题.他们思考[ebp*2]并且[ebp+ebp]是一样的,但对我来说没有意义.显然,[ebp+ebp](ebp作为基址寄存器)引用SS段.如果它们相同,也[ebp*2必须参考SS.这意味着SS只要ebp是基数或索引寄存器就被引用,这又意味着SS [ebp + esi]和[esi + ebp]引用SS段,因此它们必须相同.
有谁知道哪个部分[ebp*2]使用?
任何人都可以告诉我下面的分段错误究竟意味着什么?
Unhandled dwarf expression opcode 0x93
Run Code Online (Sandbox Code Playgroud)
它在solaris 10 i386上.
任何建议表示赞赏
与3.5相比,.NET 4.0中是否有新的IL操作码,如果有的话,我在哪里可以找到它们的列表?
根据操作码它应该是12.我错了吗?
number of ops: 8
compiled vars: !0 = $x
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------
3 0 E > EXT_STMT
1 ASSIGN !0, 5
5 2 EXT_STMT
3 POST_INC ~2 !0
4 POST_INC ~3 !0
5 ADD ~4 ~2, ~3
6 ECHO ~4
7 7 > RETURN 1
branch: # 0; line: 3- 7; sop: 0; eop: 7; out1: -2
path #1: 0,
Run Code Online (Sandbox Code Playgroud)
编辑
另外($ x ++)+($ x ++); 返回相同的结果(11).实际上,这是问题和操作码调查的主要原因.
77f4bcbc 8945fc mov dword ptr [ebp-4],eax
Run Code Online (Sandbox Code Playgroud)
这是规则:
88 /r MOV r/m8,r8 2/2 Move byte register to r/m byte
89 /r MOV r/m16,r16 2/2 Move word register to r/m word
89 /r MOV r/m32,r32 2/2 Move dword register to r/m dword
Run Code Online (Sandbox Code Playgroud)
如何解释8945fc到mov dword ptr [ebp-4],eax?
opcode ×10
assembly ×4
nasm ×2
x86 ×2
.net ×1
apc ×1
c ×1
cil ×1
clr ×1
cpu ×1
eip ×1
elf ×1
gcc ×1
il ×1
instructions ×1
intel ×1
machine-code ×1
memory ×1
opcode-cache ×1
php ×1
relocation ×1
stack ×1
symbol-table ×1
wordpress ×1