Tag: 程序集

英特尔汇编语法与AT&T相比的局限性

对我来说,英特尔语法更容易阅读。 如果我只通过英特尔语法去集合森林,我会错过任何东西吗? 是否有任何理由我想切换到AT&T(除了能够读取其他AT&T组件)? 我的第一个线索是gdb默认使用AT&T。 如果这件事情,我的重点只是任何关系汇编和语法可能要Linux / BSD和C语言。

命名空间或大会?

我在名称空间和程序集之间感到非常困惑。 是System.Data和System.Web命名空间或组件? 我注意到这些被称为命名空间,同时它们存在于GAC_32文件夹中。 那么他们究竟是什么?

为什么要在x86程序集中执行“mov esp,ebp”?

据说leave指令是一样的: mov esp,ebp pop ebp 但是什么是mov esp,ebp在这里? 这对我来说似乎并不合适

从外部文件或程序集加载WPF样式或其他静态资源

我有几个WPF应用程序,我希望我所有的样式都在共享程序集中,而不是分别在每个应用程序中声明它们。 我正在寻找一种方法,所以我不必在现有的应用程序中改变我所有的Style="{StaticResource BlahBlah}" ; 我只是想添加这个样式程序集的引用,并从当前的应用程序中删除它,所以它是从程序集中提取的。 有什么办法吗?

为什么“noreturn”函数返回?

我读了关于noreturn属性的这个问题,它用于不返回给调用者的函数。 然后我用C做了一个程序 #include <stdio.h> #include <stdnoreturn.h> noreturn void func() { printf("noreturn func\n"); } int main() { func(); } 并使用此代码生成组装: .LC0: .string "func" func: pushq %rbp movq %rsp, %rbp movl $.LC0, %edi call puts nop popq %rbp ret // ==> Here function return value. main: pushq %rbp movq %rsp, %rbp movl $0, %eax call func 为什么函数func()在提供noreturn属性后返回?

这是“不应该发生”崩溃的AMD Fusion CPU的错误?

我的公司已经开始有很多客户打来电话了,因为我们的程序在他们的系统上发生访问冲突。 SQLite 3.6.23.1发生崩溃,我们将其作为应用程序的一部分发布。 (我们发布了一个自定义构build,以便使用与应用程序其余部分相同的VC ++库,但是这是股票SQLite代码。) 当pcache1Fetch执行call 00000000时发生崩溃,如WinDbg调用堆栈所示: 0b50e5c4 719f9fad 06fe35f0 00000000 000079ad 0x0 0b50e5d8 719f9216 058d1628 000079ad 00000001 SQLite_Interop!pcache1Fetch+0x2d [sqlite3.c @ 31530] 0b50e5f4 719fd581 000079ad 00000001 0b50e63c SQLite_Interop!sqlite3PcacheFetch+0x76 [sqlite3.c @ 30651] 0b50e61c 719fff0c 000079ad 0b50e63c 00000000 SQLite_Interop!sqlite3PagerAcquire+0x51 [sqlite3.c @ 36026] 0b50e644 71a029ba 0b50e65c 00000001 00000e00 SQLite_Interop!getAndInitPage+0x1c [sqlite3.c @ 40158] 0b50e65c 71a030f8 000079ad 0aecd680 071ce030 SQLite_Interop!moveToChild+0x2a […]

C ++:将一个操作数保存在一个寄存器中,这个速度非常巨大

我一直想通过使用下面的代码来计算一个对数组元素进行扩展和求和的例程,来了解在L1caching中的数组对数组的影响。(我知道我应该通过' a“;关键是在循环中同时执行乘法和加法操作 – 到目前为止,编译器还没有计算出”a“): double sum(double a,double* X,int size) { double total = 0.0; for(int i = 0; i < size; ++i) { total += a*X[i]; } return total; } #define KB 1024 int main() { //Approximately half the L1 cache size of my machine int operand_size = (32*KB)/(sizeof(double)*2); printf("Operand size: %d\n", operand_size); double* X […]

testing点%eax%eax

可能重复: x86汇编 – 'testl'eax反对eax? 我对汇编语言编程非常新,而且我正在尝试读取二进制生成的汇编语言。 我跑过了 test %eax,%eax 或者test %rdi, %rdi等等。我很困惑这是干什么的。 %eax, %eax的值是不是相同? 什么是testing? 我读了一个地方,它正在做AND操作…..但由于它们是相同的价值,不是它只是返回%eax ? 以下是我发现这个用法的一个例子: 400e6e: 85 c0 test %eax,%eax 400e70: 74 05 je 400e77 <phase_1+0x23> 如果这两个值相比较的话,我认为是跳跃的……好吧,因为%eax本身是好的,在什么情况下我们不会跳跃? 我是一般的编程初学者,所以如果有人能向我解释这一点,我将非常感激。 谢谢!

如何反汇编原始x86代码?

我想反汇编我有一个可启动的x86磁盘的MBR(前512字节)。 我已经使用MBR复制到一个文件 dd if=/dev/my-device of=mbr bs=512 count=1 任何可以反汇编文件mbr的Linux实用程序的build议?

为什么添加汇编注释会在生成的代码中引起如此激进的变化

所以,我有这个代码: constexpr unsigned N = 1000; void f1(char* sum, char* a, char* b) { for(int i = 0; i < N; ++i) { sum[i] = a[i] + b[i]; } } void f2(char* sum, char* a, char* b) { char* end = sum + N; while(sum != end) { *sum++ = *a++ + *b++; } } […]