我正在尝试使用 x86_64 上的链接器脚本更改堆栈的起始位置。我能够使用这个移动我的可执行起始地址:
PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x200000)); . = SEGMENT_START("text-segment", 0x200000) + SIZEOF_HEADERS;
Run Code Online (Sandbox Code Playgroud)
我像这样改变了我的全局变量:
.data ALIGN(0x10000000) :
{
*(.data .data.* .gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下内容来移动堆栈区域:
. = 0x50000000;
.stack :
{
stack_start = .;
PROVIDE( stack_start = . );
*(.stack)
. += 0x2000;
stack_end = . ;
PROVIDE( stack_end = . );
}
Run Code Online (Sandbox Code Playgroud)
但这并没有让我去任何地方。
这是我用来测试堆栈位置的测试程序:
#include <stdio.h>
#include <stdlib.h>
int global_var = 555;
void test()
{
int local_test = 666;
printf("address of global_var: %p\n", &global_var);
printf("address of local_test: %p\n", &local_test); …Run Code Online (Sandbox Code Playgroud) 如果我在安装了许多库的 linux 机器上编译 C++ 程序(例如 Boost),然后将该可执行文件复制到没有这些库的新 linux 机器上,该可执行文件是否仍能正常运行?
这是“sleeper.exe”的源代码,我有:
int main(int argc, char** argv) {
cout<<argv[1];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我像这样从命令行调用时:
C:\sleeper 5
Run Code Online (Sandbox Code Playgroud)
我懂了
5
Run Code Online (Sandbox Code Playgroud)
在命令行中,所以这工作正常..
现在我试图从其他一些 exe 中调用这个 exe,如下所示:
std::cout << "ret is:" << ret;
std::cout << "\n";
CreateProcess("sleeper.exe", // No module name (use command line)
ret, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // …Run Code Online (Sandbox Code Playgroud) 我需要知道如何制作一个批处理文件来执行一个 dll 文件,就好像它是一个 exe 有谁知道我可以做什么我使用的是 Windows 7。该文件是一个 exe,只是带有 dll 扩展名。
我正在尝试编写我的第一个 python 模块,它可以轻松地分发和安装在不同的机器上(希望只需克隆存储库并运行 setup.py)。问题是我的模块依赖于一个小的二进制文件;我使用 Selenium 模块作为我的依赖项之一,它需要一个用于 chrome 的网络驱动程序(http://chromedriver.storage.googleapis.com/index.html?path=2.22/)。
我想要做的是在我的 repo 中包含不同的二进制文件,让 python 确定系统平台,选择正确的二进制文件,将其添加到系统路径,然后正常安装模块。
这容易做到吗?更重要的是,这实际上是好的做法还是有更好的选择?必须单独下载二进制文件并将其添加到我想在其上运行模块的每台机器的系统路径似乎是一件非常烦人的事情,但我宁愿不违反约定。
没有经验的用户希望“看到”我在 Node.js 中创建的应用程序,但他们不想使用控制台。据他们说,安装它是个好主意,只需单击一下,在桌面上,他们就可以“看到”它。
他们希望将 Node.js 应用程序作为 Windows 程序运行。就这样!
我该怎么做?我应该创建一个批处理文件吗?
我想知道是否可以通过检查其校验和以某种方式检查我的应用程序是否修改。
因此,例如:
int main()
{
const std::string checksum = "98123abc1239";
std::string myChecksum = calculateChecksumOfThisApp();
if(checksum != myChecksum)
std::cerr << "This application is invalid. Please check if the download has been successful." << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
显然,这里的问题是编译我的应用程序、获取可执行文件的校验和并将其插入到我checksum更改的应用程序校验和中。
我可以将校验和外部存储在某个文件中,但我希望其他人无法操作 exe 的附带好处。他们可以再次计算校验和并将其放入校验和文件中,因此不会从中获得任何好处。
有没有办法创建这样的自检?
在大多数脚本语言(例如 Ruby、Python 等)中,包管理器(例如 gem、pip 等)可以将脚本安装为可执行文件并将它们链接到 PATH 变量中引用的目录(例如 /usr/local/bin) . 这会将这些可执行脚本转换为 shell 命令,用户可以在编程界面之外以独立方式运行这些命令。
我想知道 R 中是否也有这种可能性。鉴于 R 使用标准的 Makefile,我想一定有办法做到这一点,尽管是非标准的。我已经知道我们可以使用docopt包读取 R 脚本中的命令行参数。但是有没有办法在安装包时将脚本安装为可执行文件?
在这个主题上有一个领导会很棒,但是来自 CRAN 的一个工作示例也足够了。
我使用 Selenium 和 chromedriver 创建了一个小型网络抓取应用程序,用于将内容输出到 excel 文件的项目。不幸的是,我为这个应用程序设计的人并不是最精通技术的人。
所以我的问题是如何与这些人分享这个应用程序?
我查看了 py2exe.org,但在创建可执行文件时它没有考虑 chromedriver。有没有更好的方法来做到这一点,而这些人不必手动将文件添加到他们的“usr/bin”中?
executable ×10
c++ ×3
batch-file ×2
linker ×2
packages ×2
python ×2
checksum ×1
deployment ×1
dll ×1
elf ×1
embedded ×1
exe ×1
execute ×1
firmware ×1
javascript ×1
module ×1
node.js ×1
r ×1
selenium ×1
windows ×1