我help在 GDB 时打字,但没有找到任何关于进入、跨步和退出的信息。我在_start( break _start)的汇编程序中放置了一个断点。之后我打字next,它完成了调试。我猜是因为它完成了_start并且没有按照我的意愿进入。
任何人都可以提供帮助?
振作起来,这个问题可能会显得幼稚和/或愚蠢,因为我对类 Unix 系统的内部工作以及一般的编程比较陌生。
准备好?好的!我会经历大约 3 个可笑的水平,随着我的进行而增加。
一个正在运行(在此处插入您的 linux 发行版:此后将使用 Ubuntu),另一个正在运行,比如说 Mac OS X。
编译一个等效的程序,让我们这样说:
int main()
{
int cat = 33;
int dog = 5*cat;
return dog;
}
Run Code Online (Sandbox Code Playgroud)
代码非常简单,因为我还不想考虑共享库的含义。
在各自的系统上编译时。输出之间的主要区别不是 ELF 与 Mach-O 的问题吗?如果要剥离格式的每个二进制文件,留下一个平面二进制文件,反汇编的机器指令是不是一样?(根据编译器的习惯/倾向,可能会有一些差异)。
1.)如果要开发一个程序来重新打包从我们的 Ubuntu 系统生成的平面二进制文件,以 Mach-O 格式,它会在 Mac OS X 系统中运行吗?那么,如果只有上面假设程序的编译后的二进制文件,并且有这个用于重新打包平面二进制文件的神秘工具,那么简单的程序是否能够在 Mac OS X 系统上运行?
我们现在有一个带有源代码的程序,例如:
#include <stdio.h>
int main()
{
printf("I like tortoises, but not porpoises");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
2.)假设这个程序被编译并静态链接,我们的神奇程序是否仍然能够以 Mach-O 格式重新打包原始二进制文件并使其在 mac os X 上运行?看到它不需要依赖任何其他二进制文件,(在这种情况下,mac系统不会有)
3.)如果我们使用这个假设的程序将所有必需的共享库转换为 Mach-O 格式,然后使用动态链接编译上面的程序会怎样。程序还能成功运行吗? …
如果这个问题过于面向程序员,请告诉我。我想知道是否有人熟悉Linux 2.6上open()系统调用的O_DIRECT标志?Linus 贬低它的使用,但高性能文件写入似乎表明它的使用。我想知道任何现实世界的经验和建议。
更多信息:我正在使用的应用程序确实维护着自己的缓存,这样做的速度平均提高了 5 倍或更多。写入文件时,缓存的内容必须写出到文件系统缓存,这似乎是多余的,而且是一个性能问题。
我找到了一个很好的 Delphi 替代 IDE,称为 Lazarus。但我对程序员没有问题。
请问静态链接上的所有Linux发行版的Linux二进制工作?即在我构建的 Linux 发行版上无关紧要,它可以在 Debian / ArchLinux / Ubuntu / OpenSUSE / ... 上运行吗?
根据我的发现,真的只有 32 位和 64 位重要吗?我想在发布之前确定。
我想在 Linux 中运行 BASIC 代码,就像您以前在旧计算机上所做的那样。(我正在寻找可以本地运行操作系统功能的 BASIC 中断器)
我有哪些选择?(最好是基于 Debian 和基于 Arch 的)
经过一些非常快速的研究,似乎 Bash是一种图灵完备的语言。
我想知道,为什么 Bash 几乎只用于编写相对简单的脚本?由于 Linux 附带了 Bash shell,因此您可以像其他流行的计算机语言一样运行 shell 脚本,而无需任何外部解释器或编译器。这是一个巨大的优势,在某些情况下可以弥补语言本身的平庸。
那么,此类程序的复杂程度是否有限制?纯 Bash 是用来写复杂程序的吗?是否可以在纯 Bash 中编写文件压缩器/解压缩器?编译器?一个简单的视频游戏?
是否仅仅因为只有非常有限的调试工具而很少使用?
假设我用以下行编写了一个程序:
int main(int argc, char** argv)
Run Code Online (Sandbox Code Playgroud)
现在它通过检查argv.
程序可以检测参数之间有多少个空格吗?就像我在 bash 中输入这些一样:
ibug@linux:~ $ ./myprog aaa bbb
ibug@linux:~ $ ./myprog aaa bbb
Run Code Online (Sandbox Code Playgroud)
环境是现代 Linux(如 Ubuntu 16.04),但我想答案应该适用于任何符合 POSIX 的系统。
我已经使用 Vim 作为我的文本编辑器有一段时间了,我觉得我在做任何事情都需要很长的路要走。我使用 ctags 标记我的代码库以进行导航,并使用 grep(尽管效率低下)来查找使用某些方法的位置。但我有一种感觉,有一些我不知道的非常有用的工具可以提高我的工作效率。
我可以用于补充 Vim 的通用编程的最佳软件堆栈是什么?您如何导航代码库、运行 make、将更改推送到您的源代码控制系统等?你在 Vim 旁边打开了第二个控制台吗?
我有时从源代码编译应用程序,我一直在使用:
./configure
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
但是最近,我遇到了./autogen.sh它为我生成配置和制作脚本并执行它们。
还有哪些其他方法可以简化 C/C++/C#(mono) 编译?make 好像有点老了。有没有新的工具?如果有选择,我应该使用哪一个?
的手册页ld参考了AT&T’s Link Editor Command Language,但是AT&T’s Link Editor Command Language除了指向所述手册页之外,Google 搜索并没有提供关于什么是或曾经是什么的令人满意的解释,而我预计前五个结果中会出现一个维基百科页面。
这里似乎缺少一段重要的计算历史。有没有人有关于这种语言的一些参考或历史文档?我们可以放在维基百科中为子孙后代保存的东西吗?
programming ×10
linux ×3
command-line ×2
shell ×2
bash ×1
compiling ×1
debugging ×1
executable ×1
files ×1
gdb ×1
kernel ×1
linker ×1
performance ×1
system-v ×1
utilities ×1
vim ×1