在MSVC++编译器,一个可使用__int8,__int16,__int32和类似的类型与特定尺寸的整数.这对于需要使用低级数据结构(如自定义文件格式,硬件控制数据结构等)的应用程序非常有用.
我可以在GCC编译器上使用类似的等价物吗?
每当引导程序加载操作系统时,可能只有一个程序流处于活动状态,对吧?这意味着,一个处理器保存指令指针并执行它在EIP寄存器指向的位置处发现的命令.此时,系统如何开始利用更多进程和/或线程(没有用户态线程,但是cpu线程)?
有没有办法在iPhone 4上手动设置iOS4中的低速静态相机设置,如快门速度,光圈或ISO?我不认为它存在于官方SDK中,但也许有人发现了一些私有API来允许这个?
我发现我的iPhone 4相机无法使用,因为即使在相当不错的光线下,它始终坚持以最慢的1/15秒快门速度拍摄,如果拍摄对象完全移动,会导致运动模糊.
谢谢!
任何人都知道在C#中创建ARBITRARY声波并从扬声器播放的合理方法吗?
这个问题已经不断出现多年,我总是在经历了很多失败之后放弃了它而没有找到解决方案.
我想做的就像一个反向可视化器,也就是说,我不想从声音生成"数字",我想从数字生成声音.
就像我提供的一个函数,我提供了采样率,样本大小和声音数据(例如整数数组),它会从中生成相应的wav文件(实时声音播放将是理想的,但我'对此也非常满意).
我知道wav文件规格遍布整个interweb,并且确实做了几次创建上述功能的尝试,但是一旦我开始弄乱每个样本的比特等等......它就变成了一个巨大的,无法控制的混乱.
这还没有以任何方式完成吗?我不会介意是什么用途,只要有一个.NET托管包装它(我可以从最近VS访问时间).XNA不支持低级音频.还发现了几个声称可以实现类似功能的例子,但它们要么根本不起作用,要么做一些完全不同的事情.
谢谢.
到目前为止,我已经编程了大约11年,并使用了许多不同的编程语言,从Python到C.
然而,我感到惭愧的是,我仍然缺少很多基础知识,而这些基础知识都建立在以下基础之上:
堆栈和堆的可执行文件是如何构建的以及它们如何工作
CPU如何工作?
什么是时钟周期
什么是数据总线
我的主板上的北桥和南桥如何工作
低级二进制逻辑/计算
这些只是一些例子,我正在寻找的是对此的一些很好的介绍,因为我觉得这只是成为一名优秀程序员所需要的知识.
计算机如何在最低级别向屏幕绘制任何内容(没有关于外部库,如X11)?是否应该有汇编命令来执行此操作?CPU如何控制屏幕上显示的内容?
如果我运行程序,就像
#include <stdio.h>
int main(int argc, char *argv[], char *env[]) {
printf("My references are at %p, %p, %p\n", &argc, &argv, &env);
}
Run Code Online (Sandbox Code Playgroud)
我们可以看到这些区域实际上在堆栈中.但还有什么呢?如果我们在Linux 3.5.3中运行所有值的循环(例如,直到segfault),我们可以看到一些奇怪的数字,以及由一堆零分隔的两个区域,可能是为了防止覆盖环境变量偶然.
无论如何,在第一个区域中必须有很多数字,例如每个函数调用的所有帧.
我们如何区分每个帧的结尾,参数在哪里,如果编译器添加了一个金丝雀,返回地址,CPU状态等等?
我正在搞乱一些相当低级别的东西,并试图确定为什么我使用CorFlags.exe实用程序得到不同的输出.作为参考,输出如下:
$ corflags test2.exe Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.17929 Copyright (c) Microsoft Corporation. All rights reserved. Version : v4.0.30319 CLR Header: 2.5 PE : PE32 CorFlags : 0x1 ILONLY : 1 32BITREQ : 0 32BITPREF : 0 Signed : 0 $ corflags test.exe Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.17929 Copyright (c) Microsoft Corporation. All rights reserved. Version : v4.0.30319 CLR Header: 2.5 PE : PE32 CorFlags : 0x20003 ILONLY : 1 32BITREQ : …
我最近一直在努力让自己沉浸在汇编编程的世界中,最终目标是创建自己的编程语言.我希望我的第一个真正的项目是一个用C编写的简单汇编程序,它将能够组装一小部分x86机器语言并创建一个Windows可执行文件.没有宏,没有连接器.只是集会.
在纸面上,它似乎很简单.汇编代码进来,机器代码出来.
但是一旦我想到所有的细节,它就会突然变得非常艰巨.操作系统需要哪些约定?如何对齐数据并计算跳跃?可执行文件的内部甚至是什么样的?
我感到迷茫.我找不到任何关于这个的教程,看看流行汇编程序的源代码并不鼓舞人心(尽管我愿意再试一次).
我从哪里开始?你会怎么做的?有关于这个主题的任何好的教程或文献吗?
在汇编指令级别分析代码时,如果现代CPU不按顺序或按顺序执行指令,那么指令指针的位置真正意味着什么呢?例如,假设以下x64汇编代码:
mov RAX, [RBX]; // Assume a cache miss here.
mov RSI, [RBX + RCX]; // Another cache miss.
xor R8, R8;
add RDX, RAX; // Dependent on the load into RAX.
add RDI, RSI; // Dependent on the load into RSI.
Run Code Online (Sandbox Code Playgroud)
指令指针大部分时间用在哪条指令上?我可以为所有人想出好的论点:
mov RAX, [RBX] 大概需要100个周期,因为这是一个缓存未命中.mov RSI, [RBX + RCX]也需要100个周期,但可能与前一个指令并行执行.它甚至意味着指令指针位于其中一个或另一个上?xor R8, R8 可能在内存加载完成之前执行乱序并完成,但指令指针可能会保留在此处,直到所有先前的指令也完成为止.add RDX, RAX生成管道停顿,因为它RAX是在缓慢的缓存未命中加载之后实际使用值的指令.add RDI, RSI也停滞,因为它依赖于负载RSI.