当我编写一个无操作程序时:
int main(void)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
与各种编译器:
GCC(与LLVM类似的结果):提供10-KiB可执行文件(编译-s)
部分:.CRT,.bss,.data,.idata,.rdata,.text,.tls
取决于msvcrt.dll和kernel32.dll
MSVC 2010:获得5.5 KiB可执行文件(编译/MD /Ox)
部分:.data,.rdata,.reloc,.text
取决于msvcr100.dll和kernel32.dll
本来通过合并进一步减少.rdata与.text
Windows驱动程序工具包7.1:提供6.5 KiB可执行文件(编译/MD /Ox,链接msvcrt_winxp.obj以允许它在XP上运行)
部分:.data,.rdata,.text
取决于msvcrt.dll和kernel32.dll
本来通过合并进一步减少.rdata与.text
Windows 2003驱动程序开发工具包:提供3.5 KiB可执行文件
部分:.data,.rdata, …
我在本地开发机器上开发了一个小型的C#控制台应用程序(TextMatcher.exe),现在需要将它部署到实时环境中.它引用了我开发的另一个类库,它具有泛型函数,我打算在将来的控制台应用程序中使用和改进.
最终,这个特定的应用程序将在SSIS包中执行,但是现在我只是试图从中运行它cmd.
我告诉你不是这是程序的实际输出:
E:/TextMatcher>TextMatcher.exe
No
E:/TextMatcher>
Run Code Online (Sandbox Code Playgroud)
该计算机字面意思是"否",并没有给出进一步的信息.在程序的任何地方,我都没有在任何失败或其他情况下输出"否"字样.
当然,它在当地运行良好.我确保我也包含了实用程序类库的dll.我已经阅读了有关如何正确部署控制台应用程序的其他问题(此处,此处),并已遵循建议.
注意:由于使用"否"这个词对问题至关重要,这对谷歌来说也很难实现......
编辑-这似乎是现在的工作......我只是复制从我的本地机器再次文件到远程机器......我试图让它再次突破,这样我可以找出地球上发生的事情,直到我这样做,我才会接受答案,以便人们可以更多地了解它.无论哪种方式,这都是令人费解的.
请尝试在cmd控制台中运行以以下方式运行的.exe文件:
nameFile.exe -inf fileDriver.inf安装
在Inno Setup中,我有以下内容:
var
command: Srtring;
Begin
command := 'nameFile.exe -inf fileDriver.inf install';
command := AddQuotes(command);
Exec(command, '', 'C:\pathOfFileName', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
S:= SysErrorMessage(ResultCode);
MsgBox(S, mbInformation, MB_OK);
end;
Run Code Online (Sandbox Code Playgroud)
消息显示参数无效,如何使用参数运行exe文件?
我正在尝试深入理解DOS标题,我坚持使用这些标题.我知道唯一需要的字节是MZ签名和指向PE部分的指针,但我必须知道这两个是什么:
USHORT e_cblp; // Bytes on last page of file
USHORT e_cp; // Pages in file
Run Code Online (Sandbox Code Playgroud)
在大多数可执行文件的二进制代码中,这些值分别为90h和03h.一个页面是512字节的代码,所以有3个页面,但在哪里?我在哪里可以找到它们?如何在512字节的最后一页中识别这些90h(144)字节?
此信息仅由DOS请求.将在DOS中运行的PE文件的唯一代码是DOS存根,它不是3页代码而只是64字节.那么,90h和03h必须做什么?我不能只说e_cblp=01h和e_cp=DOS header+DOS stub?
我目前正在搜索Windows Lua-IDE,它可以为我的脚本文件中的任何平台(例如windows,linux,mac os x)创建独立的可执行文件.我搜索谷歌和SO,但我找到的只是一个额外的工具.
有谁知道这种Lua-IDE?
我正在Linux OS上编写C和C++代码,我正在使用GCC.完成我的代码后,我想生成一个ELF文件.我只能生成"a.out"文件而我不需要它.我怎样才能获得ELF文件?ELF文件出现的原因是什么?或者是否可以使用此程序生成此文件?
我在可执行文件中找到了一个函数,我想从我的DLL中调用它.它的地址将0x0090DE00根据OllyDbg.我试图直接调用它:
luaL__openlib *f = ((luaL__openlib*)(module_handle + 0x0090DE00));
Run Code Online (Sandbox Code Playgroud)
而且还要按照此处的建议添加模块句柄的基础:
uint8_t * module_handle = (uint8_t *)GetModuleHandle(L"ForgedAlliance1.exe");
luaL__openlib *f = ((luaL__openlib*)(module_handle + 0x0090DE00));
Run Code Online (Sandbox Code Playgroud)
看来这不起作用,因为我得到访问冲突异常 - 看起来指针无效.
那么:如何通过使用其地址来调用此函数?
我刚刚插入了一条简单的RET指令0x00C0B530.我的代码现在看起来如下:
typedef void (*test) ();
EXTERN_DLL_EXPORT void initialize(lua_State *L)
{
// Adding this should not be necessary. I get 0x00C0B530 from
// OllyDbg where the offset 0x00401000 is included
uint8_t * module_handle = (uint8_t *)GetModuleHandle(L"ForgedAlliance1.exe");
test *f = NULL;
f = ((test*)(0x00C0B530));
(*f)(); // Crashing
} …Run Code Online (Sandbox Code Playgroud) 如标题所述,我可以使用nuitka创建单个文件可执行文件吗?我尝试--portable和--standalone选择,但它们似乎不起作用。谁能解释一下这个--recurse-all选项吗?如果您还有其他建议,请告诉我。我不想使用pyinstaller,因为它启动我的应用程序太慢。感谢您的任何回复。
Sourcetree Windows用户如何在推送之前在某些文件上设置可执行位?
如果系统管理员在Windows上使用sourcetree来管理脚本(*.sh,*.py等等),这是一个常见问题,这些脚本在远程linux系统上被拉时需要执行。
到目前为止,我发现的唯一解决方案是打开“终端”窗口,然后运行命令:
git update-index --chmod=+x <your_file>
Run Code Online (Sandbox Code Playgroud)
看来这必须是足够常见的情况,才能使用更简单的解决方案,例如右键单击文件并“设置可执行文件”或通过中的某些设置.gitattributes,但是到目前为止,我找不到任何类似的解决方案。
我也知道您可以定义“自定义操作”,但是如果这种常见的事情确实需要您事先投入大量精力进行设置,这真是令人惊讶。
有没有更好的解决方案?
我已经使用jlink为我的Java应用程序创建了运行时映像,并且希望能够将我的应用程序作为可执行文件发布到不同的平台。
理想情况下,它将是一个文件,用户可以双击它并启动应用程序,而无需安装任何程序。
目前是否有一个好方法可以做到这一点?