Tag: 可执行

如何手动编写和执行Windows .exe(带hex编辑器的机器码)?

我想知道如何使用hex编辑器来编写像Hello World程序一样简单的东西。 我知道我可以在一个接近机器级的地方使用汇编语言和汇编语言,但是我只是想尝试在一个玩具例如Hello World中编写机器代码。 这可能是一个简单的DOS .COM文件,我可以在DOSBox上运行。 但是,如果有人能够提供一个.EXE文件的例子来直接在我的Windows PC上运行它,那将会很好。 这只是纯粹的好奇心。 不,我没有直接用二进制机器代码编写程序(我通常不会编写汇编代码,大多数时候我只是把C / C ++当作我最低级的工具)。 我只是想看看是否有可能做到这一点,因为可能有人必须在电脑的早期做到这一点。 PS:我知道有关于这个话题的类似问题,但没有提供一个工作的例子。 我只是想要一个简单的例子,以便它可以帮助我理解编译器和汇编程序如何生成可执行文件。 我的意思是……在过去的第一个节目中,有人必须亲手做这个事情。 另外,对于Windows EXE格式,微软必须有人写下第一个工具来生成格式,以及Windows自己读取它的方式,然后执行它。

如何编译一个Linux shell脚本成为一个独立的可执行文件*二进制*(即不只是如chmod 755)?

我正在寻找一个免费的开源工具集,它将编译各种“经典”脚本语言,例如Korn Shell,ksh,csh,bash等作为可执行文件 – 如果脚本调用其他程序或可执行文件,被包含在单个可执行文件中。 原因: 为了混淆交付给客户的代码,以便不泄露我们的知识产权 – 将其交付给客户自己的机器/系统,我无法控制访问权限,因此程序文件必须是二进制的通过在文本编辑器或hexdump查看器中查看工作是不容易看到的。 为客户制作一个简单的部署程序,而不需要/或者最less量的任何外部依赖。 我喜欢简单的东西,而不需要包pipe理器,因为: 我不能依靠客户的知识去执行(不)包装说明和 我不能依赖关于安装软件包(实际上来自第三方)的机器策略。 最简单的首选方法是能够编译到适当的机器代码一个单一的可执行文件,将无需任何依赖的情况下运行。

在Linux中创build可执行文件

我打算做的一件事情是编写(痛苦简单的)Perl脚本,我希望能够在不从terminal显式调用Perl的情况下运行它们。 我明白,要做到这一点,我需要授予他们执行权限。 用chmod做这件事很简单,但是它似乎也是一个稍微费力的额外步骤。 我想要的是以下两件事之一: 首先,有没有办法在保存文件时设置执行标志? 目前我正在尝试使用gedit和geany,但是如果它有这个function的话,它会愿意切换到一个类似(或更好)的特色编辑器。 如果没有,有没有办法来声明在一个特定的目录中创build的所有文件应该有执行权限? 我的umask被设置为022,这应该是好的,据我了解,但它会出现文件创build为文本文件(具有666默认权限),而不是可执行文件(777默认权限)。 也许我只是在懒惰,但我认为必须有一个更方便的方式比chmod每一个创build的脚本。

如何在Gradle中导出一个可执行的jar,这个jar可以运行,因为它包含了引用库

如何在Gradle中导出一个可执行的jar,这个jar可以运行,因为它包含了引用库。 的build.gradle apply plugin: 'java' manifest.mainAttributes("Main-Class" : "com.botwave.analysis.LogAnalyzer") repositories { mavenCentral() } dependencies { compile ( 'commons-codec:commons-codec:1.6', 'commons-logging:commons-logging:1.1.1', 'org.apache.httpcomponents:httpclient:4.2.1', 'org.apache.httpcomponents:httpclient:4.2.1', 'org.apache.httpcomponents:httpcore:4.2.1', 'org.apache.httpcomponents:httpmime:4.2.1', 'ch.qos.logback:logback-classic:1.0.6', 'ch.qos.logback:logback-core:1.0.6', 'org.slf4j:slf4j-api:1.6.0', 'junit:junit:4.+' ) } 我运行后:gradle构build 它创build生成文件夹,并在build / libs / XXX.jar中运行jar: java -jar build / libs / XXX.jar 这里是一个执行说: Exception in thread "main" java.lang.NoClassDefFoundError: ch/qos/logback/core/joran/spi/JoranException 我怎样才能运行它的参考库?

自动将“git update-index –chmod + x”应用于可执行文件

我经常将bash脚本添加到我的git存储库中,并且在git add之前,脚本在linux文件系统中具有可执行权限。 但是在将添加的文件推送到远程存储库并拉入另一个位置后,这些文件显示为具有不可执行的权限。 似乎有两种方法可以纠正这个问题: 1. chmod u+x $script git commit -am "fixing the script permissions… again…" 要么 2. git update-index –chmod=+x $script 有没有办法让git只是在git add期间查看脚本的文件权限,认识到“嘿,这是一个可执行文件! 并直接将它添加到存储库的可执行权限?

在Windows可执行文件中embeddedJRE?

假设我想分发一个Java应用程序。 假设我想把它作为一个单独的可执行文件来分发。 我可以很容易地将应用程序及其所有外部依赖项都构build成一个.jar文件(带有一些ant黑客攻击)。 现在假设我想将它作为Windows上的.exe文件分发。 这很容易,给出了漂亮的工具(如Launch4j等)。 但是现在假设我也不想依赖于安装了正确的JRE(或任何JRE)的最终用户。 我想分发一个JRE与我的应用程序,我的应用程序应该运行在这个JRE上。 创build一个Windows安装程序可执行文件非常简单,并在其中embedded了一个包含所有必需JRE文件的文件夹。 但是,我分发安装程序,而不是一个单一的文件的应用程序。 有没有办法将应用程序和 JREembedded作为应用程序启动器的.exe文件(而不是作为安装程序)?

fork(),vfork(),exec()和clone()

我期待在Google上find这四者之间的差异,我预计在这方面会有大量的信息,但这四个调用之间确实没有任何可靠的比较。 我着手编译一下这些系统调用之间的区别,这里是我得到的。 所有这些信息都是正确的/我错过了什么重要的东西? Fork :叉调用基本上是复制当前进程,几乎在所有方面都是相同的(并非所有的东西都被复制,例如,在一些实现中资源限制,但是想法是尽可能地创build副本)。 新进程(subprocess)获取不同的进程ID(PID),并将旧进程(父进程)的PID作为其父PID(PPID)。 因为这两个进程现在运行完全相同的代码,所以他们可以知道哪个是由fork的返回代码 – 子代得到0,父代获得子代的PID。 当然,这一切都假设分叉调用起作用 – 否则,不会创build子对象,并且父对象将获得错误代码。 Vfork :vfork和fork的基本区别在于,当使用vfork()创build一个新进程时,父进程暂时挂起,subprocess可能借用父进程的地址空间。 这种奇怪的状态继续下去,直到subprocess退出,或调用execve(),在这一点父进程继续。 这意味着vfork()的subprocess必须小心,以避免意外地修改父进程的variables。 特别的,subprocess不能从包含vfork()调用的函数返回,也不能调用exit()(如果需要退出,应该使用_exit();实际上,对于subprocess也是这样一个普通的fork())。 Exec :执行调用是基本上用新程序replace整个当前进程的一种方法。 它将程序加载到当前进程空间并从入口点运行它。 exec()用函数指向的可执行文件replace当前进程。 除非有exec()错误,否则控制将不会返回到原始程序。 Clone :克隆,作为分叉,创build一个新的过程。 与fork不同,这些调用允许subprocess与调用进程共享部分执行上下文,如内存空间,文件描述符表和信号处理程序表。 当使用克隆创buildsubprocess时,它将执行函数应用程序fn(arg)。 (这与fork不同,fork从原始fork调用的位置继续执行。)fn参数是一个指向subprocess在执行开始时调用的函数的指针。 arg参数被传递给fn函数。 当fn(arg)函数应用程序返回时,subprocess终止。 fn返回的整数是subprocess的退出代码。 subprocess也可以通过调用exit(2)或在收到致命信号后明确终止。 获得的信息forms: fork和exec之间的区别 http://www.allinterview.com/showanswers/59616.html http://www.unixguide.net/unix/programming/1.1.2.shtml http://linux.about.com/library/cmd/blcmdl2_clone.htm 感谢您抽时间阅读 ! 🙂

杀毒软件在我的可执行文件中出现错误

我遇到了一个恼人的问题。 突然, Avira AntiVir开始将我的软件中的一个可执行文件标记为病毒。 由于几乎所有用户的默认操作都是单击“确定”,Avirabuild议将病毒置于隔离区,因此我的大多数用户正在删除此可执行文件。 那么,让我们不要傲慢,检查我是否确实感染了。 我把这个文件发布到http://www.virustotal.com ,而所有的反病毒只有Avira把它标记为感染病毒。 此外,我用两种不同的反病毒扫描我的电脑,它很干净。 我已经发布了一封邮件给我的用户解释发生了什么,但这是我的支持,我真的不想要的开销。 好的,问题是:有没有办法避免这种行为? 除了签署文件之外,我想不出别的办法(真的不知道它是否会解决),但让我们看看你是否有任何创意。

带有外部.jar的Java命令行

我使用.jar开发一个项目来重用代码。 所以我在.jar上命名为TOOLS.jar,并且在文件HelloWorld.java中开发了一个简单的应用程序,从TOOLS.jar引用我的包TOOLS 我用这个命令行编译: javac -g -d C:\MyApp -cp TOOLS.jar HelloWorld.java 这是成功的,当我想执行我的应用程序时,我使用这个命令(我在C:\ MyApp文件夹中): java -cp <path>\TOOLS.jar;. HelloWorld 这是成功的,但我的问题是: 当我有多个外部.jar时,如何执行我的应用程序? 我必须使用-cp选项来添加每个命令吗? 有没有办法只生成一个二进制文件并执行它(与C程序的.exe)?