{"id":15648577,"url":"https://github.com/daniel-beard/jmo","last_synced_at":"2026-01-20T15:32:49.448Z","repository":{"id":145802722,"uuid":"153361540","full_name":"daniel-beard/jmo","owner":"daniel-beard","description":"MachO file parser in Julia. Written as a learning experience, not production ready.","archived":false,"fork":false,"pushed_at":"2020-04-12T01:46:08.000Z","size":531,"stargazers_count":2,"open_issues_count":6,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-07T00:51:16.860Z","etag":null,"topics":["disassembly","julia","macho","macho-parser","macos","objective-c-runtime","parser"],"latest_commit_sha":null,"homepage":"","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daniel-beard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-16T22:17:54.000Z","updated_at":"2022-08-04T07:36:34.000Z","dependencies_parsed_at":"2024-03-31T05:45:42.181Z","dependency_job_id":null,"html_url":"https://github.com/daniel-beard/jmo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/daniel-beard/jmo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-beard%2Fjmo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-beard%2Fjmo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-beard%2Fjmo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-beard%2Fjmo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daniel-beard","download_url":"https://codeload.github.com/daniel-beard/jmo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-beard%2Fjmo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28606142,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T14:45:23.139Z","status":"ssl_error","status_checked_at":"2026-01-20T14:44:16.929Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["disassembly","julia","macho","macho-parser","macos","objective-c-runtime","parser"],"created_at":"2024-10-03T12:25:18.222Z","updated_at":"2026-01-20T15:32:49.433Z","avatar_url":"https://github.com/daniel-beard.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jmo \n[![Build Status](https://dev.azure.com/danielbeard0/danielbeard0/_apis/build/status/daniel-beard.jmo?branchName=master)](https://dev.azure.com/danielbeard0/danielbeard0/_build/latest?definitionId=3\u0026branchName=master)\n\nJulia MachO file parser. Very experimental, do not use in production anywhere for now.\nI'm adding new commands as I require them.\n\n## Usage\n\n```\n$ julia src/jmo.jl --help                             \nusage: jmo.jl [-h] [-a ARCH] [--archs] [-c] [-L] [--objc-classes]\n              [--disassemble] [--min-sdk] [--uuid] [--binding-opcodes]\n              [--help] [--version] file\n\nMachO object file viewer\n\npositional arguments:\n  file               File to read\n\noptional arguments:\n  -h, --header       display header\n  -a, --arch ARCH    select an architecture for fat files\n  --archs            print architectures\n  -c, --ls           show load commands summary\n  -L, --shared-libs  show names and version numbers of the shared\n                     libraries that the object file uses.\n  --objc-classes     lists names of objective-c classes that exist in\n                     the object file\n  --disassemble      Disassemble the __TEXT section\n  --min-sdk          Show the deployment target the binary was\n                     compiled for\n  --uuid             Print the 128-bit UUID for an image or its\n                     corresponding dSYM file.\n  --binding-opcodes  Shows binding info op codes\n  --help             Show help\n  --version          show version information and exit\n```\n\n## Usage Examples\n\n'-h display header'\n\n```\n$ julia src/jmo.jl -h ~/xip\nMachHeader64\n+------------+-----------------+------------------------+------------+-------+------------+--------------------------------------------+\n|   magic    |     cputype     |       cpusubtype       |  filetype  | ncmds | sizeofcmds |                   flags                    |\n+============+=================+========================+============+=======+============+============================================+\n| 0xfeedfacf | CPU_TYPE_X86_64 | CPU_SUBTYPE_X86_64_ALL | MH_EXECUTE |  21   |    2488    | MH_DYLDLINK|MH_NOUNDEFS|MH_PIE|MH_TWOLEVEL |\n+------------+-----------------+------------------------+------------+-------+------------+--------------------------------------------+\n```\n\n'--ls show load commands summary'\n\n```\n$ julia src/jmo.jl --ls ~/xip\nLoad Commands:\nLC_SEGMENT_64\nLC_SEGMENT_64\nLC_SEGMENT_64\nLC_SEGMENT_64\nLC_DYLD_INFO_ONLY\nLC_SYMTAB\nLC_DYSYMTAB\nLC_LOAD_DYLINKER\nLC_UUID\nLC_BUILD_VERSION\nLC_SOURCE_VERSION\nLC_MAIN\nLC_LOAD_DYLIB\nLC_LOAD_DYLIB\nLC_LOAD_DYLIB\nLC_LOAD_DYLIB\nLC_LOAD_DYLIB\nLC_LOAD_DYLIB\nLC_FUNCTION_STARTS\nLC_DATA_IN_CODE\nLC_CODE_SIGNATURE\n```\n\n'-L shared libs example'\n\n```\n$ julia src/jmo.jl -L ~/xip\n        /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 58286.220.1)\n        /System/Library/PrivateFrameworks/PackageKit.framework/Versions/A/PackageKit (compatibility version 1.0.0, current version 434.0.0)\n        /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1555.10.0)\n        /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)\n        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)\n        /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1555.10.0)\n```\n\n'--disassemble example'\n\n```\n$ julia src/jmo.jl --disassemble Binaries/ObjcThin\n0x100000e10:    push            rbp\n0x100000e11:    mov             rbp, rsp\n0x100000e14:    sub             rsp, 0x10\n0x100000e18:    lea             rax, [rip + 0x219]\n0x100000e1f:    mov             qword ptr [rbp - 8], rdi\n0x100000e23:    mov             qword ptr [rbp - 0x10], rsi\n0x100000e27:    mov             rdi, rax\n0x100000e2a:    mov             al, 0\n0x100000e2c:    call            0x100000ee2\n0x100000e31:    lea             rsi, [rip + 0x220]\n0x100000e38:    mov             rdi, rsi\n0x100000e3b:    mov             al, 0\n0x100000e3d:    call            0x100000ee2\n0x100000e42:    lea             rsi, [rip + 0x22f]\n0x100000e49:    mov             rdi, rsi\n0x100000e4c:    mov             al, 0\n0x100000e4e:    call            0x100000ee2\n0x100000e53:    lea             rsi, [rip + 0x23e]\n0x100000e5a:    mov             rdi, rsi\n0x100000e5d:    mov             al, 0\n0x100000e5f:    call            0x100000ee2\n0x100000e64:    add             rsp, 0x10\n0x100000e68:    pop             rbp\n0x100000e69:    ret\n0x100000e6a:    nop             word ptr [rax + rax]\n0x100000e70:    push            rbp\n0x100000e71:    mov             rbp, rsp\n0x100000e74:    sub             rsp, 0x20\n0x100000e78:    mov             dword ptr [rbp - 4], 0\n0x100000e7f:    mov             dword ptr [rbp - 8], edi\n0x100000e82:    mov             qword ptr [rbp - 0x10], rsi\n0x100000e86:    call            0x100000eee\n0x100000e8b:    mov             rsi, qword ptr [rip + 0x2f6]\n0x100000e92:    mov             rcx, qword ptr [rip + 0x2df]\n0x100000e99:    mov             rdi, rsi\n0x100000e9c:    mov             rsi, rcx\n0x100000e9f:    mov             qword ptr [rbp - 0x20], rax\n0x100000ea3:    call            qword ptr [rip + 0x167]\n0x100000ea9:    mov             qword ptr [rbp - 0x18], rax\n0x100000ead:    mov             rax, qword ptr [rbp - 0x18]\n0x100000eb1:    mov             rsi, qword ptr [rip + 0x2c8]\n0x100000eb8:    mov             rdi, rax\n0x100000ebb:    call            qword ptr [rip + 0x14f]\n0x100000ec1:    xor             edx, edx\n0x100000ec3:    mov             esi, edx\n0x100000ec5:    lea             rax, [rbp - 0x18]\n0x100000ec9:    mov             rdi, rax\n0x100000ecc:    call            0x100000ef4\n0x100000ed1:    mov             rdi, qword ptr [rbp - 0x20]\n0x100000ed5:    call            0x100000ee8\n0x100000eda:    xor             eax, eax\n0x100000edc:    add             rsp, 0x20\n0x100000ee0:    pop             rbp\n0x100000ee1:    ret\nPtr{Nothing} @0x0000000121493100\n```\n\n'--uuid example'\n\n```\n$ julia src/jmo.jl --uuid ~/ObjcThin\nLC_UUID:\n07DF0928-1403-37A6-9B9B-7186FA400CBB\n```\n\n'--min-sdk example'\n\n```\n$ julia src/jmo.jl --min-sdk ~/ObjcThin\nLC_VERSION_MIN_MACOSX\nLoaded version min: 658688 658944\nversion: 10.13.0\nsdk: 10.14.0\n```\n\n'--binding-opcodes example'\n\n```\n$ julia src/jmo.jl --binding-opcodes ~/ObjcThin\nBinding info 0x00002018 - 0x000020e0\n0x0001 BIND_OPCODE_SET_DYLIB_ORDINAL_IMM(2)\n0x0002 BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, _OBJC_CLASS_$_NSObject)\n0x001a BIND_OPCODE_SET_TYPE_IMM(1)\n0x001b BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB(0x02, 0x000001c0)\n0x001e BIND_OPCODE_DO_BIND()\n0x001f BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, _OBJC_METACLASS_$_NSObject)\n0x003b BIND_OPCODE_ADD_ADDR_ULEB(0xffffffffffffffc8)\n0x0046 BIND_OPCODE_DO_BIND()\n0x0047 BIND_OPCODE_DO_BIND()\n0x0048 BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, __objc_empty_cache)\n0x005c BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED(0x00000028)\n0x005d BIND_OPCODE_DO_BIND()\n0x005e BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, _objc_msgSend)\n0x006d BIND_OPCODE_ADD_ADDR_ULEB(0xfffffffffffffe40)\n0x0078 BIND_OPCODE_DO_BIND()\n0x0079 BIND_OPCODE_SET_DYLIB_ORDINAL_IMM(3)\n0x007a BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, dyld_stub_binder)\n0x008c BIND_OPCODE_ADD_ADDR_ULEB(0xffffffffffffffe8)\n0x0097 BIND_OPCODE_DO_BIND()\n0x0098 BIND_OPCODE_SET_DYLIB_ORDINAL_IMM(4)\n0x0099 BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, ___CFConstantStringClassReference)\n0x00bc BIND_OPCODE_ADD_ADDR_ULEB(0x0030)\n0x00be BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB(3, 0x00000018)\n0x00c1 BIND_OPCODE_DO_BIND()\n\nLazy binding info 0x000020e0 - 0x00002148\n0x0001 BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB(0x02, 0x00000018)\n0x0003 BIND_OPCODE_SET_DYLIB_ORDINAL_IMM(1)\n0x0004 BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, _NSLog)\n0x000c BIND_OPCODE_DO_BIND()\n0x000e BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB(0x02, 0x00000020)\n0x0010 BIND_OPCODE_SET_DYLIB_ORDINAL_IMM(2)\n0x0011 BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, _objc_autoreleasePoolPop)\n0x002b BIND_OPCODE_DO_BIND()\n0x002d BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB(0x02, 0x00000028)\n0x002f BIND_OPCODE_SET_DYLIB_ORDINAL_IMM(2)\n0x0030 BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, _objc_autoreleasePoolPush)\n0x004b BIND_OPCODE_DO_BIND()\n0x004d BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB(0x02, 0x00000030)\n0x004f BIND_OPCODE_SET_DYLIB_ORDINAL_IMM(2)\n0x0050 BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM(0x00, _objc_storeStrong)\n0x0063 BIND_OPCODE_DO_BIND()\n\nBinding Records\ndescription     value\n__DATA  0x1000011c0     BIND_TYPE_POINTER       TODO    (libobjc.A.dylib)       _OBJC_CLASS_$_NSObject\n__DATA  0x100001190     BIND_TYPE_POINTER       TODO    (libobjc.A.dylib)       _OBJC_METACLASS_$_NSObject\n__DATA  0x100001198     BIND_TYPE_POINTER       TODO    (libobjc.A.dylib)       _OBJC_METACLASS_$_NSObject\n__DATA  0x1000011a0     BIND_TYPE_POINTER       TODO    (libobjc.A.dylib)       __objc_empty_cache\n__DATA  0x1000011c8     BIND_TYPE_POINTER       TODO    (libobjc.A.dylib)       __objc_empty_cache\n__DATA  0x100001010     BIND_TYPE_POINTER       TODO    (libobjc.A.dylib)       _objc_msgSend\n__DATA  0x100001000     BIND_TYPE_POINTER       TODO    (libSystem.B.dylib)     dyld_stub_binder\n__DATA  0x100001038     BIND_TYPE_POINTER       TODO    (CoreFoundation)        ___CFConstantStringClassReference\n__DATA  0x100001058     BIND_TYPE_POINTER       TODO    (CoreFoundation)        ___CFConstantStringClassReference\n__DATA  0x100001078     BIND_TYPE_POINTER       TODO    (CoreFoundation)        ___CFConstantStringClassReference\n__DATA  0x100001098     BIND_TYPE_POINTER       TODO    (CoreFoundation)        ___CFConstantStringClassReference\n\nLazy Binding Records\ndescription     value\n__DATA  0x100001018     (Foundation)    _NSLog\n__DATA  0x100001020     (libobjc.A.dylib)       _objc_autoreleasePoolPop\n__DATA  0x100001028     (libobjc.A.dylib)       _objc_autoreleasePoolPush\n__DATA  0x100001030     (libobjc.A.dylib)       _objc_storeStrong\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniel-beard%2Fjmo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaniel-beard%2Fjmo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniel-beard%2Fjmo/lists"}