据我了解,编译器生成一个二进制文件,其中包含 CPU 可以读取的 1 和 0。我有一个二进制文件,但是如何打开它以查看其中的 1 和 0?一个文本编辑器说它无法打开它...
PS 我有一个汇编编译的二进制文件,它应该是 1 和 0 的纯二进制代码?
我的问题是为什么现在一些操作系统事件处理仍然用汇编语言而不是更高级的语言(如 C)编写,而内核本身主要是用 C 编写的?
在某些环境中,对某些指令或使用某些寄存器存在限制。例如,在 Linux 内核中,通常不允许使用 SSE/AVX 或 FP 寄存器。因此,大多数优化的 memcpy 变体无法使用,因为它们依赖于 SSE 或 AVX 寄存器,并且在 x86 上使用了基于 mov 的纯 64 位副本。对于这些平台,使用 rep movsb 可以在不破坏 SIMD 代码限制的情况下获得优化的 memcpy 的大部分性能。
为什么 x86_64 内核不能使用 SSE/AVX?如果它会使memcopy()速度更快,似乎应该允许它。我只是在学习 Intel Assembly,当我看到这个评论时,我特别想学习 SEE/AVX。
对 Linux 内核中的 SSE/MME 和 AVX 优化特别感兴趣。
我需要在mini210s运行Linux 3.0.8 armv7l 的FriendlyARM上安装 Chromium
depot_tools按照这些指南安装获取代码和
Linux Chromium ARM得到后depot_tools:
vagrant@vagrant:~/depot_tools$ fetch chromium
Run Code Online (Sandbox Code Playgroud)
export GYP_CROSSCOMPILE=1
export GYP_DEFINES="target_arch=arm arm_float_abi=hard"
Run Code Online (Sandbox Code Playgroud)
vagrant@vagrant:~/depot_tools/src$ ./chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py --arch=arm
Installing Debian Wheezy arm root image: /home/vagrant/depot_tools/src/chrome/installer/linux/debian_wheezy_arm-sysroot
Downloading http://storage.googleapis.com/chrome-linux-sysroot/toolchain/285950/debian_wheezy_arm_sysroot.tgz
build/install-build-deps.sh --arm
build/install-build-deps-android.sh
gclient sync
Run Code Online (Sandbox Code Playgroud)
build/gyp_chromium -Goutput_dir=out_arm
ninja -C out_arm/Debug chrome
Run Code Online (Sandbox Code Playgroud)
vagrant@vagrant:~/depot_tools/src$ ninja -C out_arm/Debug chrome
ninja: Entering directory `out_arm/Debug'
[222/18316] CXX obj/third_party/webrtc/modules/audio_coding/codecs/audio_encoder_interface.audio_encoder.o
FAILED: ../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF …Run Code Online (Sandbox Code Playgroud) 我正在寻找 GRUB2 最终跳转到内核代码并因此在 x86 系统上移交执行的代码行?我猜它在一个汇编程序文件中,因为这是非常低架构的东西。我查看了源文件,在boot.S 的第 455 行/grub-core/boot/i386/pc/*.S找到了一个JMP,但可能是内存中 GRUB2 内核的地址,而不是 linux 内核。kernel_address
任何具有汇编和 GRUB2 知识的人都可以帮助我吗?
我有一个从这个补丁编译的自定义内核模块,它logitech G19在其他 G 系列设备中增加了对键盘的支持。我在 Ubuntu 的特立独行内核的主分支 (2.6.35) 上编译得很好。
我可以启动并加载模块,但我遇到了一个非常奇怪的情况。一旦我加载模块(在启动时或通过 modprobe),我就会出现黑屏并且我的控制台锁定。
奇怪的是它没有锁定我的系统,它只是当前的控制台会话。我可以通过 SSH 进入我的盒子,它给了我一个终端和一个会话。我可以打字,我什至可以运行一个命令,它会给我输出。然后它绘制我的下一个提示并立即锁定。
我看到dmesg有一个空指针,我得到以下堆栈跟踪:
[ 956.215836] input: Logitech G19 Gaming Keyboard as /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1.2/1-2.1.2:1.1/input/input5
[ 956.216023] hid-g19 0003:046D:C229.0004: input,hiddev97,hidraw3: USB HID v1.11 Keypad [Logitech G19 Gaming Keyboard] on usb-0000:00:1d.7-2.1.2/input1
[ 956.216065] input: Logitech G19 as /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1.2/1-2.1.2:1.1/input/input6
[ 956.216128] Registered led device: g19_97:orange:m1
[ 956.216146] Registered led device: g19_97:orange:m2
[ 956.216178] Registered led device: g19_97:orange:m3
[ 956.216198] Registered led device: g19_97:red:mr
[ 956.216216] Registered led device: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下 NASM 命令组装下面的程序集源文件:
nasm -f elf -o test.o test.asm
Run Code Online (Sandbox Code Playgroud)
这完成没有错误,然后我尝试链接一个可执行文件ld:
ld -m elf_i386 -e main -o test test.o -lc
Run Code Online (Sandbox Code Playgroud)
这似乎也成功了,然后我尝试运行可执行文件:
$ ./test
bash: ./test: No such file or directory
Run Code Online (Sandbox Code Playgroud)
不幸的是,它似乎不起作用。我尝试ldd在可执行文件上运行:
linux-gate.so.1 => (0xf777f000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7598000)
/usr/lib/libc.so.1 => /lib/ld-linux.so.2 (0xf7780000)
Run Code Online (Sandbox Code Playgroud)
我安装了该lsb-core软件包并验证它/lib/ld-linux.so.2存在。为什么我仍然无法运行可执行文件?
我试图在运行 64 位版本 Ubuntu 15.04 的机器上执行此操作。
源代码:
; This code has been generated by the 7Basic
; compiler <http://launchpad.net/7basic>
extern printf
extern scanf
extern read
extern strlen
extern strcat
extern …Run Code Online (Sandbox Code Playgroud) 当我运行我的 C 程序时,我需要在我的机器上生成MIPS特定的代码。当我简单地奔跑时,
gcc -O2 -S -c hello.c
Run Code Online (Sandbox Code Playgroud)
在我的系统上,我得到了hello.s它似乎生成了一些汇编代码,但它似乎不是MIPS特定的代码。hello.s文件内容如下。
.file "hello.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "Hello world"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB11:
.cfi_startproc
movl $.LC0, %edi
xorl %eax, %eax
jmp printf
.cfi_endproc
.LFE11:
.size main, .-main
.ident "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-4)"
.section .note.GNU-stack,"",@progbits
Run Code Online (Sandbox Code Playgroud)
如何在我的机器上生成MIPS特定代码?
我的机器详细信息如下。
arch
x86_64
Run Code Online (Sandbox Code Playgroud) Unix 的早期版本包括 Doug McIlroy 的工具tmg(“transmogrifier”),一个早期的编译器-编译器。TMG 是用 Dennis Ritchie 的汇编语言以及 TMGL 本身(TMG 翻译成汇编的语言)实现的。这是TMG 的手册(1972)。这是来自第 6 版 Unix 的完整源代码。
由于我试图了解 McIlroy 对 TMG 的实施是如何工作的,因此我正在阅读该文件tmgl.s,这tmgl.t是由 TMG 完成的翻译。我对以下摘录感到困惑:
.1=.
1
.2=.
2
.3=.
Run Code Online (Sandbox Code Playgroud)
和:
goto;..2
..3:null
..2:
Run Code Online (Sandbox Code Playgroud)
我阅读了PAL-11R和Unix 汇编手册,但不记得有任何解释。
特别:
.意思是“位置计数器”,但什么是.3=.?..意思是“搬迁柜台”,但什么是..3?(更糟糕的是,这种语法似乎只在 TMG 实现中遇到,而不是 Unix V6 的任何其他源文件。而且,为了排除损坏代码或逐步淘汰语法的可能性,TMG 源实际上是在Python 中编译的运行 Unix V6 的PDP-11 模拟器。)
Fedora 17 是否有任何 8086 模拟器(免费或付费)?我正在使用 AT&T 风格学习汇编语言。