标签: executable

为什么机器语言不是a.out?

我编译以下程序gcc并接收输出可执行文件a.out.:

#include <stdio.h>
int main () {
  printf("hello, world\n");
}
Run Code Online (Sandbox Code Playgroud)

当我执行时cat a.out,为什么文件是"乱码"(这叫什么?)而不是0和1的机器语言:

??????? H__PAGEZERO(__TEXT__text__TEXT?`??__stubs__TEXT 
P__unwind_info__TEXT]P]__eh_frame__TEXT?H??__DATA__program_vars [continued]
Run Code Online (Sandbox Code Playgroud)

c executable machine-language

0
推荐指数
2
解决办法
435
查看次数

使用 Haskell 运行可执行文件

假设有一个 C++ 代码,我使用以下命令编译成可执行文件:

g++ test.cpp -o testcpp
Run Code Online (Sandbox Code Playgroud)

我可以使用终端运行它(我使用的是 OS X),并提供一个用于在 C++ 程序内部处理的输入文件,例如:

./testcpp < input.txt
Run Code Online (Sandbox Code Playgroud)

我想知道从Haskell内部这样做是否可行。我听说过模块中的readProcess函数System.Process。但这仅允许运行系统 shell 命令。

这样做:

out <- readProcess "testcpp" [] "test.in"
Run Code Online (Sandbox Code Playgroud)

或者:

out <- readProcess "testcpp < test.in" [] ""
Run Code Online (Sandbox Code Playgroud)

或者:

out <- readProcess "./testcpp < test.in" [] ""
Run Code Online (Sandbox Code Playgroud)

抛出此错误(或非常相似的错误,具体取决于我使用的是上述哪一个):

testcpp: readProcess: runInteractiveProcess: exec: does not exist (No such file or directory)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,Haskell 是否可以这样做。如果是这样,我应该如何使用以及使用哪些模块/功能?谢谢。

编辑

好的,正如大卫建议的那样,我删除了输入参数并尝试运行它。这样做有效:

out <- readProcess "./testcpp" [] ""
Run Code Online (Sandbox Code Playgroud)

但我仍然坚持提供输入。

shell executable haskell command-line-arguments

0
推荐指数
1
解决办法
885
查看次数

为什么 'msg * alarm' 会在一段时间后消失?

我有一个小的 powershell 脚本,它允许我快速为自己设置警报。它基本上只是等待指定的分钟数然后调用

味精 * 警报!

这很有效 - 弹出一个消息框。唯一的问题是它会在一段时间后消失 - 所以如果我不在办公桌前,我会错过消息框。

根据此处找到的文档,这是我未指定时间值时的行为。

/time: seconds :指定您发送的消息在用户屏幕上显示的时间。一旦达到时间限制,消息就会消失。如果未设置时间限制,则该消息将保留在用户的屏幕上,直到用户看到该消息并单击“确定”。

然而事实并非如此,它确实消失了。现在,我必须指定一个任意高的数字才能保留。

    msg * /time:999999 alarm!
Run Code Online (Sandbox Code Playgroud)

windows parameters executable native default-parameters

0
推荐指数
1
解决办法
1557
查看次数

什么函数设置“program_incall_name”?什么时候?

这是我得到的一些信息program_invocation_name:

  • 该值包含用于调用调用程序的名称。
  • 该值是自动初始化的。
  • 该值是全局变量。
    (所以乍一看,我以为它在<.bss>or中<.data>。
    但它在stack内存区域中。这很奇怪......
    )


这是调试器视图program_invocation_name:

pwndbg> x/s program_invocation_name
0xbffff302: "/tmp/my_program"
Run Code Online (Sandbox Code Playgroud)


问题)

我从程序开始到结束都遵循执行流程,但我找不到设置的那一刻。program_invocation_name


问题)

Q1 . 谁(什么函数)设置了这个值?(loader设置这个值..?)
Q2。global variable尽管该值位于 ? 中,但程序如何知道将其识别为stack?
Q3 . 有时,某些二进制文件运行时没有此值。在这种情况下,问题是loader?

binary x86 assembly executable elf

0
推荐指数
1
解决办法
695
查看次数

这个文件在 macOS 中无法执行吗?

背景

我有一个名为 mason_simulator 的 Unix 可执行文件。我通过以下方式在 macOS 终端中检查了它的属性

file mason_simulator
Run Code Online (Sandbox Code Playgroud)

结果如下:

mason_simulator: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=f020e84c15ef18a541d6bce9376f58fe3e547448, not stripped
Run Code Online (Sandbox Code Playgroud)

问题 这是否意味着无法在 macOS 中执行此文件?因为当我双击它时,会出现错误消息:“无法执行二进制文件”。

linux macos executable

0
推荐指数
1
解决办法
742
查看次数

./abc.o: 无法执行二进制文件:Exec 格式错误

我有一个 Linux 虚拟机。有一些信息。

uname -a: Linux 05d57a817610 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

cat /proc/version: Linux version 4.4.0-131-generic (buildd@lgw01-amd64-015) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018

cat /etc/issue: Ubuntu 18.04.2 LTS \n \l

/*abc.c*/
#include<stdio.h>
int main(){

    printf("Hello World\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用了命令gcc abc.c -o abc.o,然后我得到了一个文件:abc.o. 它是可执行的。

当我使用命令时:gcc abc.c -c,它生成了一个文件abc.o. 然后我尝试使用命令:./abc.o,但它显示bash: …

c c++ linux executable

0
推荐指数
1
解决办法
375
查看次数

使用每个标签地址,.o 文件的总大小会增加 24 个字节(加上 8 个字节(总共 32 个字节))

在我的 FASM 项目(对象)中,我尝试创建一个跳转表并用于dq每个跳转地址,但有一个问题!
对于每个dq .jmp1(跳转地址定义),.jmp1我的最终 .o 文件的总大小将添加 24 个字节(加上地址的 8 个字节(总共 32 个字节))!
那额外的 24 个字节是什么?有什么办法可以避免吗?这种情况仅发生在目标文件中,而不发生在可执行文件中!

它定义了 32 个字节,而不是每个跳转地址 8 个字节!问题是什么?

format ELF64

section '.text'

func:
        lea     rax, [8*rax+.jmp_table]

 .jmp1:

 .jmp_table:
        dq .jmp1 ; 8 bytes + 24 bytes !!! (to .o total size)
        dq .jmp1 ; 8 bytes + 24 bytes !!! (to .o total size)   
Run Code Online (Sandbox Code Playgroud)

但是当我创建一个可执行文件时,每个文件dq只需要 8 个字节(这是我所期望的)......

format ELF64 EXECUTABLE

segment readable executable

func:
        lea     rax, [8*rax+.jmp_table]

 .jmp1:

 .jmp_table: …
Run Code Online (Sandbox Code Playgroud)

assembly executable x86-64 object-files fasm

0
推荐指数
1
解决办法
94
查看次数

如何查看a.out文件的内容?

c ++的可执行文件将包含链接器,模块和其他,我想查看其内容,我正在使用linux,我如何查看a.out的内容?哪个命令应该用来浏览a.out,文本编辑器不会显示内容......

c++ linux executable

-1
推荐指数
1
解决办法
6635
查看次数

将多个文件拖放到可执行 C# 上

我制作了一个可执行文件,我想将任意数量的文件拖到其中。我希望它删除所有这些文件的前 15 个字符。它正在按预期重命名大量文件,但随后会引发错误。

“未处理的异常:System.IndexOutOfRangeException:索引超出数组范围。在 RemoveTimeStampMultipleFiles.Program.Main(String[] args)”

当我拖动 2 个文件时,它是否在寻找第三个文件?

还有一种方法可以允许无限文件而不是最多 99 个文件吗?

using System;
using System.IO;

namespace RenameVersion2
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0)
                return; // return if no file was dragged onto exe


            for (int i = 0; i < 99; i++)
            {
                if (args[i].Length == 0)
                    System.Environment.Exit(0);

                string MyString = Path.GetFileNameWithoutExtension(args[i]);
                String NewFileName = MyString.Remove(0, 15);


                string path = Path.GetDirectoryName(args[i])
                   + Path.DirectorySeparatorChar
                   + MyString
                   + Path.GetExtension(args[i]);

                string newPath = Path.GetDirectoryName(args[i])
                   + …
Run Code Online (Sandbox Code Playgroud)

c# executable visual-studio

-1
推荐指数
1
解决办法
474
查看次数

在线C++编译器:为我输出二进制文件?

是否有任何网站允许我上传我的源代码,它会返回我可以从Linux运行的二进制文件?

我在使用Linux时非常苛刻,这种服务对我来说将是一种救命.

我知道codepad.org但据我所知,它只输出这些程序的文本.我需要下载它在编译时生成的可执行文件.

c++ linux compiler-construction executable

-2
推荐指数
1
解决办法
3265
查看次数