标签: otool

在 macOS 上检查 ELF 文件并获取二进制文件

我有一个 ELF 文件,我想从中获取我的代码的hex或文件。bin在终端中,如果 a do a file main,这是我的文件,它会显示:

main: ELF 32-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, not stripped
Run Code Online (Sandbox Code Playgroud)

据我所知,objdump在 macOS 上不起作用,并且otool -l main出现以下错误:

llvm-objdump: 'main': Object is not a Mach-O file type.
Run Code Online (Sandbox Code Playgroud)

ELF 文件是使用以下命令创建的:

riscv-none-gcc/8.2.0-2.1-20190425-1021/bin/riscv-none-embed-gcc --specs=nosys.specs main.c -o main
Run Code Online (Sandbox Code Playgroud)

那么有没有办法做到呢?

多谢

binary macos elf otool binutils

4
推荐指数
1
解决办法
6989
查看次数

armot7的otool错误的方法实现地址?

我经常得到'otool'所示方法的实现地址的1字节偏移量.

例如'otool -o'给出0xe99d5,但'otool -tvV'给出:

+[NSError(SomeCategory) someMethod]:
000e99d4            b590        push    {r4, r7, lr}
000e99d6        f6441184        movw    r1, 0x4984
000e99da            af01        add     r7, sp, #4
000e99dc        f2c0010a        movt    r1, 0xa
Run Code Online (Sandbox Code Playgroud)

所以方法从0xe99d4开始.0xe99d5看起来不对,没有对齐.我相信'otool'工作正常,我不了解实施的某些方面.如何解释输出?

assembly arm mach-o objective-c otool

3
推荐指数
1
解决办法
532
查看次数

如何使用otool检查是否启用了Stack Smashing?

我看到很多答案,像这样在互联网上说要使用otool命令来检查stack_chk_guard和检查stack_chk_fail项目。

问题是,我不知道otool 必须应用到哪个文件。在来源 上,他们说这otool将应用于扩展名为 的文件.a,这是一个库。但是我不知道如何将其应用于我想检查整个项目而不仅仅是库的情况。我试图在我的项目中找到任何带有.a扩展名的文件,但我没有找到。我试图otool对抗.app, .framework, .xcarchive, 和.ipa,都失败了。

有人可以帮忙吗?如有必要,请详细说明,因为我以前从未使用otool过,并且在描述otool.

xcode otool

3
推荐指数
1
解决办法
3342
查看次数

为什么 macOS 会杀死由 clang 创建的静态可执行文件?

我有一个用于 m1 arm cpu 的最小 c 程序,返回 42:

void _start() {
    asm("mov x0, #42;");
    asm("mov x16, #1;");
    asm("svc 0x80;");
}
Run Code Online (Sandbox Code Playgroud)

此代码在告诉 clang 使用 _start 符号后进行编译并返回正确的值。

clang -Wl,-e, -Wl,__start test.c -o dyn.out
./dyn.out ; echo $?
42
Run Code Online (Sandbox Code Playgroud)

然而,根据 otool,这个二进制文件仍然具有动态链接:

otool -L ./dyn.out 
./dyn.out:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
Run Code Online (Sandbox Code Playgroud)

在告诉 clang 生成未签名的静态二进制文件后,macOS 在尝试运行时立即杀死该二进制文件。

clang -Wl,-e, -Wl,__start -static -nostdlib test.c -o static_no_sign.out
zsh: killed     ./static_no_sign.out
Run Code Online (Sandbox Code Playgroud)

在运行之前对二进制文件进行签名也会产生同样的问题。

clang -Wl,-e, -Wl,__start -static -nostdlib test.c -o static_sign.out 
codesign -s - static_sign.out 
./static_sign.out 
zsh: killed …
Run Code Online (Sandbox Code Playgroud)

macos mach-o clang otool osx-gatekeeper

3
推荐指数
1
解决办法
570
查看次数

Qt Mac应用程序无法创建自包含应用程序包(Qt Creator Build)

我使用的是Qt Creator 3.6.1Qt 5.6.0 (Clang 7.0 (Apple), 64 bit)了,我遇到了一些问题,而试图创建一个用于部署的应用程序包.

注意:调用应用程序名称 bibi

  1. Qt Creatorbibi.appbuild-bibi-Desktop_Qt_5_6_0_clang_64bit-Release/文件夹下成功生成
  2. bibi.app无法在其他Mac上成功链接Qt
  3. macdeployqt 没有解决问题

以下是详细信息:

bibi.app在其他Mac上运行时出现错误截图:

otool

> otool -L build-bibi-Desktop_Qt_5_6_0_clang_64bit-Release/bibi.app/Contents/MacOS/bibi
build-bibi-Desktop_Qt_5_6_0_clang_64bit-Release/bibi.app/Contents/MacOS/bibi:
    @rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.6.0, current version 5.6.0)
    @rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.6.0, current version 5.6.0)
    @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.6.0, current version 5.6.0)
    /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version …
Run Code Online (Sandbox Code Playgroud)

macos qt otool dyld macdeployqt

2
推荐指数
1
解决办法
1261
查看次数

计算 Objective-c 二进制文件中选择器的数量

是否有工具/脚本可以帮助我迭代(或仅计算)objective-c 二进制文件中的所有选择器。我想静态分析目标 c 二进制文件并获得该指标。我试过了,otool -tV但它转储的所有数据都是我无法解析的十六进制数据。有些人建议使用,lldb但我不确定如何做到这一点。

objective-c otool selector objective-c++ lldb

2
推荐指数
1
解决办法
308
查看次数

mach-o标题中的标志是指什么?

我正在尝试这个,我注意到mach-o标题的标志部分,我想知道它做了什么.我试着谷歌搜索它,发现很多引用它,但没有解释标志是什么.

如果我在编译的基本hello世界中使用otool,clang hello.c那么运行otool它会给我这些标志:

$ otool a.out -h
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedfacf 16777223          3  0x80           2    14        664 0x00200085
Run Code Online (Sandbox Code Playgroud)

对于Chess.app

Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedfacf 16777223          3  0x80           2    32       4576 0x00210085
Run Code Online (Sandbox Code Playgroud)

这里有什么标志?我在哪里可以找到这样的答案?

macos mach-o otool

2
推荐指数
1
解决办法
205
查看次数

如何打印 iOS 二进制文件中所有 Objective-C 类的名称?

我想使用"otool""objdump"打印在 iOS 二进制文件中找到的所有 Objective-C 类的名称。我在 macOS 上的未加密的 iOS 二进制文件上执行此操作。

我尝试过的:

  1. 这里建议的解决方案如何静态转储 Cocoa 应用程序中调用的所有 ObjC 方法?
otool -oV /path to executable/ | grep name | awk '{print $3}'
Run Code Online (Sandbox Code Playgroud)

但我不知道如何只解析 Objective-C 类名。

  1. 使用“nm”的解决方案,但我不太喜欢它:
nm /path to executable/ | grep _OBJC_CLASS_
Run Code Online (Sandbox Code Playgroud)

你们能帮我用 cmd/脚本来打印 iOS 二进制文件中所有 Objective-C 类的名称吗?

mach-o objective-c otool objdump

1
推荐指数
1
解决办法
1454
查看次数

理解arm汇编代码结构的问题

代码如下所示,我想知道在结尾部分

0000e0b4    001d22d0    ldrsbeq r2, [sp], -r0
Run Code Online (Sandbox Code Playgroud)

这是否为这行代码进行计算,因为它加载了结束部分中定义的地址

0000e03c    e59f4070    ldr r4, [pc, #112]  ; 0xe0b4
Run Code Online (Sandbox Code Playgroud)

为什么代码以这种方式组织?

-[Cube message1]:
0000e02c    e92d40f0    push    {r4, r5, r6, r7, lr}
0000e030    e28d700c    add r7, sp, #12 ; 0xc
0000e034    e24dd008    sub sp, sp, #8  ; 0x8
0000e038    e59f1070    ldr r1, [pc, #112]  ; 0xe0b0
0000e03c    e59f4070    ldr r4, [pc, #112]  ; 0xe0b4
0000e040    e1a06000    mov r6, r0
0000e044    e591e000    ldr lr, [r1]
0000e048    e5941000    ldr r1, [r4]
0000e04c    e59e5000    ldr r5, [lr]
0000e050 …
Run Code Online (Sandbox Code Playgroud)

assembly arm otool

0
推荐指数
1
解决办法
1805
查看次数