我有一个包含错误的可执行文件(C++,i386,在 MacOS/X Tiger 下编译,如果重要的话)。该错误的修复很简单——代码中有一个地方调用 fork() 而它不应该。因为修复很简单,而且因为此时从头开始重新编译可执行文件会很困难(不要问),我想直接修补可执行文件/二进制文件。
作为迈出的第一步,我在我的可执行文件上运行了“otool -tV MyExecutableName”,瞧,我在反汇编输出中发现了这个:
./MyExecutableName:
(__TEXT,__text) section
[... many lines omitted ...]
0002ce0d subl $0x10,%esp
0002ce10 calll 0x0051adac
0002ce15 movzbl 0x14(%ebp),%esi
0002ce19 calll 0x00850ac9 ; symbol stub for: _fork
0002ce1e cmpl $0x00,%eax
0002ce21 jll 0x0002cf02
0002ce27 jle 0x0002ce34
[... many more lines omitted ...]
Run Code Online (Sandbox Code Playgroud)
所以我想做的是替换第 0002ce19 行的操作码,这样它就不会调用 _fork,而是无条件地跳转到失败情况(即它应该像 fork() 返回 -1 一样)
不幸的是,我在反汇编/二进制补丁方面是一个完全的新手,所以我不确定如何去做。特别是,我的问题是:
1)我应该将哪些字节写入位置 0002ce19 到 0002xe1d 以获得我想要的?我假设它是“jmp 0x0002cf02”的组装等价物,但我如何弄清楚这些字节是什么?
2) "otool -tV" 打印的偏移量似乎是到可执行文件的 __TEXT 段的偏移量。如何找出打印偏移量和文件顶部之间的字节增量,以便我可以编辑/修补文件中的正确字节?
感谢您提供的任何建议!
是否有可能创建一个接受命名空间的基于Thor的Ruby可执行文件?例如,允许命令行中的以下内容:./thorfile greet:formal
鉴于我有以下thorfile:
#!/usr/bin/env ruby
require 'rubygems'
require 'thor'
class TalkTasks < Thor
namespace "talk"
desc "greet", "says hello"
def greet
puts "Hello!"
end
class Formal < Thor
namespace "talk:formal"
desc "greet", "says a formal hello"
def greet
puts "Good evening!"
end
end
end
TalkTasks.start
Run Code Online (Sandbox Code Playgroud)
这个thorfile提供以下任务(thor -T):
thor talk:formal:greet # says a formal hello
thor talk:greet # says hello
Run Code Online (Sandbox Code Playgroud)
我也可以直接使用thorfile作为可执行文件:
./thorfile greet
Run Code Online (Sandbox Code Playgroud)
哪个显示:
你好!
我如何获得./thorfile formal:greet(或类似的)在Formal类中执行greet方法,以便显示:
晚上好!
我想知道,因为我在谷歌上找不到任何东西,如果我使用MonoDevelop在Linux上编译应用程序,我可以将生成的可执行文件发送到Windows计算机并期望它运行吗?file输出:
PE32 executable for MS Windows (console) Intel 80386 32-bit Mono/.Net assembly
Run Code Online (Sandbox Code Playgroud)
所以我希望它能在开箱即用的Windows上运行.但是我把它发送给了一位朋友进行测试,它说"这不是一个有效的win32应用程序".那么,我需要做什么?它只是C#中的一个基本的hello world控制台应用程序.
如果我有一个由几种不同类型的文件(图片,声音等)和多个jar依赖项组成的java项目,那么将它们全部打包到一个可以双击的jar中的好方法是什么?
我知道罐子本身是相当愚蠢的,因为他们不看自己所依赖的文件(我只是在一丝沮丧之后才意识到这一点(轻描淡写)). - 如果jar A依赖于jar B中包含的类,那么将jar B放入jar A中是行不通的.Jar A必须与jar B在同一目录中.
...现在,我知道我可以从所有其他jar中提取所有文件并将所有文件放在同一目录中.这将排序工作,但我不想这样做,因为:1,这将是混乱和2.它仍然不会解决需要有在同一目录作为最终罐子的声音文件的问题.(无论出于何种原因,声音文件的行为与内部罐子完全相同)
基本上,我只是想做到这一点,以便我的应用程序所依赖的文件不是令人讨厌的可见和炫耀.所以,如果有一些解决方案,我可以将所有内容放在一个jar中,并让它成为运行整个程序的唯一必要文件,那将是最佳的.但是,我愿意接受创造性/创造性的方法来绕过这个问题,比如让父目录中的批处理脚本执行jar或其他东西.(我说"或者其他什么"因为那个确切的场景只适用于Windows操作系统....你知道我的意思!)
有没有办法告诉Delphi项目构建一个DLL作为主机应用程序使用可执行文件在与正在构建的DLL的输出目录相同的目录中?
这样的事情:

有一点是,我正在使用Delphi XE2的选项集,所以在我正在构建的DLL的dproj中,我甚至没有DCC_ExeOutput目录,不确定这是否重要.
允许这样会严重地解决我们尝试从VSS迁移到SVN时遇到的一些问题.
另外,你称之为$(东西)的是什么?
我正在使用PyInstaller将两个脚本转换成一个可执行文件,其中一个调用另一个.我遇到的问题是我无法弄清楚如何捆绑这两个脚本并仍让它们相互引用:
导致该问题的代码是一个脚本,script1.py包含:
subprocess.call(['gksudo','python script2.py'])
Run Code Online (Sandbox Code Playgroud)
这在我正常运行脚本时工作正常,但是一旦它们被打包在PyInstaller中,我就不知道如何使调用工作.
我想运行以下bash脚本,它存储在Elisp字符串中,而不是存储在.sh文件中,然后将shell输出存储在变量中.
#!/bin/bash
IFS=: read -ra _dirs_in_path <<< "$PATH"
for _dir in "${_dirs_in_path[@]}"; do
for _file in "${_dir}"/*; do
[[ -x ${_file} && -f ${_file} ]] && printf '%s\n' "${_file##*/}"
done
done
Run Code Online (Sandbox Code Playgroud)
我无法运行shell-command由多个字符串组成的bash脚本.Emacs和Long Shell命令也没有帮助我,因为compile并且comint-run还需要命令,而不是bash语法.
如何从Elisp运行复杂的bash脚本?
我有可执行文件的全名和路径,例如C:\IW4\BIN\iw32.exe,并且想要提取该可执行文件的编译日期和时间.
我怎样才能做到这一点?我找不到合适的解决方案.
我的C++程序必须使用Borland C++ Builder在Windows下编译,如果该信息有任何价值.
编辑:我发现了一些示例代码,它的工作原理,感谢您的所有指示和提示!
守则是:
#include <stdio.h>
#include <windows.h>
int main (int argc, char** argv)
{
WIN32_FILE_ATTRIBUTE_DATA attr;
SYSTEMTIME creation;
if (argc < 2)
return 1;
GetFileAttributesEx(argv[1], GetFileExInfoStandard, &attr);
FileTimeToSystemTime(&attr.ftLastWriteTime, &creation);
printf("Created: %04d-%02d-%02d %02d:%02d:%02d\n"
"Size: %d bytes\n",
creation.wYear, creation.wMonth, creation.wDay,
creation.wHour, creation.wMinute, creation.wSecond,
attr.nFileSizeLow);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中提供以下输出:
Created: 2013-06-20 12:37:14
Size: 15098368
Run Code Online (Sandbox Code Playgroud) 我已经制作了一个nasm程序集hello world程序,如下所示:
global start
section .text
start:
mov rax, 0x20000004
mov rdi, 1
lea rsi, [rel msg]
mov rdx, msg.len
syscall
mov rax, 0x20000001
mov rdi, 0
syscall
section .data
msg: db "Hello, World!", 10
.len: equ $ - msg
Run Code Online (Sandbox Code Playgroud)
做的nasm -f macho64 print.asm很好,但ld -macosx_version_min 10.10 -o print print.o会出现如下错误:
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for inferred architecture x86_64
Run Code Online (Sandbox Code Playgroud)
我不懂这啥意思 :)。有人可以帮我解决这个问题吗?谢谢!PS我正在Mac OS X优胜美地上使用。
我写了一个Python程序,大多数将要运行它的人都是Windows用户.我尝试在2个不同的设备上使用pyinstaller和py2exe,一个使用Windows,另一个使用arch-linux.
我使用pip3安装pyinstaller --no-cache不止一次重新安装它
我总是得到同样的错误:
sudo pyinstaller --windowed --onefile test.py
49 INFO: PyInstaller: 3.2
49 INFO: Python: 3.6.0
50 INFO: Platform: Linux-4.8.13-1-ARCH-x86_64-with-arch
51 INFO: wrote /home/XXXXX/test.spec
52 INFO: UPX is not available.
53 INFO: Extending PYTHONPATH with paths
['/home/XXXXX', '/home/XXXXX']
54 INFO: checking Analysis
54 INFO: Building Analysis because out00-Analysis.toc is non existent
54 INFO: Initializing module dependency graph...
57 INFO: Initializing module graph hooks...
58 INFO: Analyzing base_library.zip ...
Traceback (most recent call last):
File "/usr/bin/pyinstaller", line 11, in <module> …Run Code Online (Sandbox Code Playgroud) executable ×10
assembly ×2
pyinstaller ×2
python ×2
c# ×1
c++ ×1
compilation ×1
datetime ×1
delphi ×1
delphi-xe2 ×1
elisp ×1
emacs ×1
gksudo ×1
jar ×1
java ×1
ld ×1
linux ×1
monodevelop ×1
namespaces ×1
nasm ×1
otool ×1
patch ×1
py2exe ×1
ruby ×1
shell ×1
thor ×1
windows ×1
x86-64 ×1