我目前正在制作一个高级的 Mach-O 可执行反汇编器,并且对可执行标头的 Magic 和 Cigam 部分感到困惑。我了解它们的工作原理以及它们如何确定可执行文件的字节顺序以及是否为 32/64 位,但我坚持的一件事是:哪种十六进制顺序代表 Magic 和 Cigam:
这是通用标头的原始十六进制(直接来自 hexdump):
cffaedfe- 这是一个 64 位标头,但它是 Magic 还是 Cigam。
我对此感到困惑的原因是因为像 cigam 这样的所有排序都需要以相反的方向翻转每 4 个字节,并且我是否以字节序读取字节???我查看了马赫标题,发现了这些东西:
MH_MAGIC_64 = 0xfeedfacf
MH_CIGAM_64 = 0xcffaedfe(MH_MAGIC 已交换)
但 0xcffaedfe 是否意味着从 mach-o 文件中的直接十六进制进行匹配,这意味着它的 CIGAM 或者我以 Endian 读取它并cffaedfe变成feedfacf变得神奇???
请告诉我:
(直接来自文件 hexdump)cffaedfe - 这是 Magic 还是 Cigam???
谢谢
我使用 Visual Studio 2015 编译了一个普通的 exe。除了预期的类型 调试目录之外IMAGE_DEBUG_TYPE_CODEVIEW,我还发现了第二个类型IMAGE_DEBUG_TYPE_VC_FEATURE.
我找不到有关它包含哪些数据及其用途的信息。有人可以解释一下或向我指出解释它的来源吗?
executable debug-symbols portable-executable visual-studio visual-studio-2015
我用 emacs + slime 开发 common lisp。我的机器是 mac pro M1。而且,我使用 kitty 终端模拟器。
当我在 repl 中运行我的应用程序(参见末尾的代码)时,它工作正常。
当我创建并运行可执行文件时,就好像程序的顺序不同了。
例如,我有 5 个问题需要用户输入......
(defpackage custom-sender
  ;; import the exactly the symbols I need from a package
  (:import-from :cl-json :encode-json-to-string)
  (:use :cl)
  (:export :main))
(in-package custom-sender)
(defun main()
  (asking-questions))
(defun asking-questions ()
  (let ((firstname (prompt-read "What is the firstname of the contact?"))
        (email (prompt-read "What is their email?"))
        (job (prompt-read "What is the job?"))
        (first-line (prompt-read "what is the first line of their …可能重复:
Linux可执行文件是否与OS X"兼容"?
我在os x上使用GLUT和OpenGL编译了一些c ++代码.一切正常.我把它作为a.out
有没有办法将这个发送给使用os x的人?会有一些奇怪的依赖吗?我可以将它发送给使用Linux的人吗?
我怀疑我能做什么,这就是我在这里问的原因.我在谷歌上环顾四周但找不到任何有用的东西,我可能不会找到合适的东西
谢谢
如何像exe文件一样执行外部程序?我想获得已安装程序的列表,然后在选择时执行它们.如果您想知道我为什么需要这个,我正在更新调度程序应用程序以提供一个功能,以便用户可以在通知时打开程序.例如,通知会说"......开始...你想打开......?" [是] [否]
我想创建一个可以在没有源代码的任何计算机上运行的程序,这怎么可能?如果我在程序中使用OpenGL,它会有什么不同吗?
我正在使用open和make函数,所以我尝试将1024字节写入文件,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main(void)
{
        int fd;
        fd = open("hellow" , O_RDWR);
        write(fd , "hello" , 1024);
}
当我linux用gcc它编译它编译时很好,但是当我尝试hellow在终端中打开时less,我得到了这个警告:
 "hellow" may be a binary file.  See it anyway?
当我回答是的时候,我得到了我打算用随机符号整页编写的行.所以我的问题是,有没有人知道什么原因hellow被认为是一个二进制文件,为什么这些随机字符被写在预定的行之后.
我目前有一个项目,其中 有一个模板,CMakeLists.txt用于一个可执行文件,一个标头和一个 .cpp文件。我希望它有几个.cpp文件,但仍然要全部编译和构建。我应该如何使CMakeLists.txt文件生成并编译所有.cpp文件,如何检查它是否有效?
例如:我创建了一个简单的C程序,打印"Hello,World",编译它并创建了一个大小为39.8Kb的可执行文件.
按照这个问题,我能够创建等效的但是用汇编写的,这个程序的大小是39.6Kb.
这让我感到非常惊讶,因为我期望汇编程序比C程序小.正如问题所示,它使用了C头和gcc编译器.这会使装配程序更大还是它们大致相同的大小是正常的?
使用strip命令我减少了两个文件.这删除了调试代码,现在两者都有非常相似的文件大小.两者都是18.5Kb.
test.c的: