我试图使用.text
使elf
二进制文件的objcopy --writable-text executable_name
部分可写。该命令正常执行,没有任何错误。
通过readelf
检查部分权限时,我可以看到文本部分仍然只具有读取和执行权限。
在浏览此特定选项的objcopy
手册页时,提到该选项对所有二进制格式都没有意义。 (这是我无法做到的原因吗?)。
任何人都可以指出我在这里缺少的东西。
由于
(Ubuntu x86_64 bit machine,GNU objcopy(GNU Binutils for Ubuntu)2.22.90.20120924)
答案 0 :(得分:1)
在查看此特定选项的objcopy手册页时,提到该选项对所有二进制格式都没有意义。 (这是我无法做到的原因吗?)。
是
在此rather detailed description of special sections the ELF format,您会看到.text
具有SHF_ALLOC + SHF_EXECINSTR
属性(为其分配了空间,空间中包含可执行代码),但不是SHF_WRITE
(可以写入空格)。您要求objcopy
做的只是对ELF .text
部分无效。
答案 1 :(得分:1)
在Debian上,我只能链接到-N,并生成一个带有可写.text
的可执行文件所以:ld -N obj.o
答案 2 :(得分:0)
首先完成此操作: objcopy --writable-text --set-section-flags .text = CONTENTS,ALLOC,LOAD,CODE
然后objdump -x或readelf -a查看通常在程序头之后的加载段表。请参阅ELF的手册页。对于32位可执行文件,例如:
使用hexedit打开二进制文件并查看文件偏移量0x1C(通常为0x34)处的值,然后遍历0x20字节结构(文件偏移量0x2a处列出的大小),直到找到您在上一个转储中标识的结构包含.text部分。倒数第二个长值将是00000005(05 00 00 00)并且需要添加写入,这将成为00000007(07 00 00 00)。现在它将按预期工作,没有任何限制,例如-Wl, - omagic的共享库问题。有点技术性,但需要几秒钟才能完成。
无论如何,这一位标志已经引起了无数问题,没有任何解释澄清了这一小点,使其能够完美地运作。
可以使用GCC轻松编译代码解决方案以进行更改,如果按常规方式执行此操作可能更容易,也是更好的解决方案:
cell.panCellToDeleteBlock = { [weak self] indexPath in
self?.dataArray.remove(at: indexPath.row)
self?.collectionView.reloadData()
}