标签: low-level

跨平台VM的C内存管理

我问一个问题,关于C型尺寸,我得到一个很好的答案,但我意识到,我可能不会制定这个问题非常好是我的目的.

我的背景来自计算机工程师,然后转到软件工程师,所以我喜欢计算机架构,并且总是考虑制作VM.我刚刚完成了一个有趣的Java项目,我很自豪.但是有些法律问题我现在无法开源,而且我现在有空闲时间.所以我想看看我是否可以在C上制作另一个VM(速度更快),只是为了娱乐和教育.

事情是,我上次写一篇非琐事C问题时,我不是一个C程序,这是10多年前的事了.我是Pascal,Delphi,现在是Java和PHP程序员.

我可以预见有很多障碍,我正试图解决一个问题,那就是访问现有的库(在Java中,反射解决了这个问题).

我计划通过拥有一个数据缓冲区(类似于堆栈)来解决这个问题.我的VM客户端可以编程将数据放入这些堆栈,然后再指向本机函数.

int main(void) {
    // Prepare stack
    int   aStackSize = 1024*4;
    char *aStackData = malloc(aStackSize);

    // Initialise stack
    VMStack aStack;
    VMStack_Initialize(&aStack, (char *)aStackData, aStackSize);

    // Push in the parameters
    char *Params = VMStack_CurrentPointer(&aStack);
    VMStack_Push_int   (&aStack, 10  ); // Push an int
    VMStack_Push_double(&aStack, 15.3); // Push a double

    // Prepare space for the expected return
    char *Result = VMStack_CurrentPointer(&aStack);
    VMStack_Push_double(&aStack, 0.0); // Push an empty double for result

    // Execute
    void (*NativeFunction)(char*, char*) = &Plus; …
Run Code Online (Sandbox Code Playgroud)

c memory-management cross-platform low-level vm-implementation

6
推荐指数
1
解决办法
503
查看次数

如何使用低级8位标志作为条件?

在我的键盘钩子中,每个按键都会获得一个标志,指示它是否被注入. http://msdn.microsoft.com/en-us/library/ms644967(VS.85).aspx

我从lParam中提取了一个KBDLLHOOKSTRUCT.我可以访问kbd.flags.XXX.我只是不知道如何将这个8位标志转换为if (injected) {...我知道如何使用的条件类型.

如果你们中的一个聪明的计算机科学类型会帮助我,我会非常感激.

    private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
    {
        KBDLLHOOKSTRUCT kbd = new KBDLLHOOKSTRUCT();
        Marshal.PtrToStructure(lParam, kbd);

        //if (injected) {...
Run Code Online (Sandbox Code Playgroud)

干杯!

c# flags low-level

6
推荐指数
2
解决办法
2353
查看次数

TrueType 到 C 数组

我正在编写一个低级 C 应用程序,并且计划使用数组来存储我的字体。

问题是,我想使用的字体是 TrueType 格式。我该如何:

  1. 将 TTF 转换为大尺寸、黑白、位图字体,无需任何 AA(严格来说与编程无关);

  2. 将黑白位图字体解析为 C 字节数组。

位图应该使用什么格式?应该足够简单,我这个只有一年多经验的初学者程序员可以编写一个解析器将其存储在所述数组中。

我不想使用外部库,并且我想保留 C Std。库。使用量降至最低。这是一个大学项目,我想自己写所有内容。

c parsing text typography low-level

6
推荐指数
1
解决办法
6113
查看次数

编译器如何编译编译器?

来自高级编程背景,我有兴趣学习低级编程.我想知道如何编译编译器?

在查看wiki中的一些文章后,数字机器代码被认为是最低级语言,但必须有一个编译器来编译这个机器代码.编写的编译器是什么语言?

compiler-construction machine-code low-level

6
推荐指数
3
解决办法
6554
查看次数

F中的F代表什么?

我正在学习汇编语言而且我遇到了FWORD(6个字节).我很好奇这是什么意思F?维基页面上没有任何内容,MSDN上也没有任何内容.

https://en.wikipedia.org/wiki/FWord

https://msdn.microsoft.com/en-us/library/26c4cbza.aspx

x86 assembly definition cpu-word low-level

6
推荐指数
1
解决办法
1655
查看次数

C 中的类型转换是怎么回事?

我了解 C 中的类型转换在高层次上所做的事情。我知道有时这是隐式完成的,有时需要明确完成。但是我不知道这是如何在低级别发生的:

假设GetSignal返回一个enum类型。

 uint8 outValue;
 f32_t iValue;
 iValue = (f32_t)GetSignal();
 outValue = (uint8)((i32_t)iValue);
Run Code Online (Sandbox Code Playgroud)

我的问题是这里发生了什么。我不知道在所有这些类型转换之后如何重新组织这些位。

c low-level

6
推荐指数
1
解决办法
112
查看次数

如何将 PHYSICAL_MONITOR 与监视器 DeviceID 关联

我需要帮助将从GetPhysicalMonitorsFromHMONITOR获得的 PHYSICAL_MONITOR与监视器 DISPLAY_DEVICE.DeviceID 关联起来(例如“\?\DISPLAY#GSM59AB#5&932a802&1&UID261#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}”),它来自使用的EnumDisplayDevices带有标志 EDD_GET_DEVICE_INTERFACE_NAME ,或者以某种方式从 DISPLAY_DEVICE.DeviceID 获取 PHYSICAL_MONITOR ,反之亦然。

我需要将它们关联起来,因为:

  1. HANDLE PHYSICAL_MONITOR.hPhysicalMonitor 将用于lowlevelmonitorconfigurationapi,因为我需要向监视器发送命令。

  2. DISPLAY_DEVICE.DeviceID 用于使用 SetupAPI 从注册表获取 EDID 结构(前 128 个字节对我来说足够了,只需要制造商代码和型号)

1和2已经完成,问题在于将id与物理监视器关联起来。 此外,还可以仅使用 SetupAPI 从注册表获取所有显示器 EDID,但在这种情况下,不可能获取物理显示器句柄。

MSDN上同样的问题,没有解决((

我还注意到一件事:此代码枚举了所有监视器:

DWORD DispNum = 0;
DISPLAY_DEVICE DisplayDevice;
// Initialize DisplayDevice.
ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);

while ((EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0)))
{
    std::wstring deviceName = DisplayDevice.DeviceName;
    DISPLAY_DEVICE DisplayDeviceM;
    ZeroMemory(&DisplayDeviceM, sizeof(DisplayDeviceM));
    DisplayDeviceM.cb = sizeof(DisplayDeviceM);
    int monitorIndex = 0;
    while (EnumDisplayDevices(deviceName.c_str(), monitorIndex, &DisplayDeviceM, EDD_GET_DEVICE_INTERFACE_NAME))
    {
        std::wstring monitorID = …
Run Code Online (Sandbox Code Playgroud)

c++ winapi multiple-monitors low-level low-level-api

6
推荐指数
1
解决办法
1559
查看次数

最接近Python语法的语言,即更低级的语言!

我猜话题就说明了一切!但是,我真的不是一个类似于Python的语法!而低级......就像C++一样.我猜Java和C#也可以,但我对{}确实存在很大问题,而且总是存在问题.< - 和每一行.我讨厌这么多......

python syntax programming-languages low-level

5
推荐指数
3
解决办法
2576
查看次数

如何在OS X上运行具有硬盘限制的进程?

我正在实现一种算法,该算法需要在4MB的硬盘限制下运行。

有没有一种方法可以运行某个进程,如果该进程超过内存限制,该进程将被杀死?还是只是简单地分析其分配以查看已分配的最大内存量?

memory macos profiling low-level

5
推荐指数
1
解决办法
1746
查看次数

测量使用Clang/LLVM生成的函数的大小?

最近,在处理项目时,我需要测量C函数的大小,以便能够将其复制到其他地方,但无法找到任何"干净"的解决方案(最终,我只是想拥有在我可以参考的函数末尾插入的标签).

编写了这个体系结构的LLVM后端(虽然它可能看起来像ARM,但事实并非如此)并且知道它为该体系结构发出了汇编代码,我选择了以下hack(我认为评论很好地解释了它):

/***************************************************************************
 * if ENABLE_SDRAM_CALLGATE is enabled, this function should NEVER be called
 * from C code as it will corrupt the stack pointer, since it returns before
 * its epilog. this is done because clang does not provide a way to get the
 * size of the function so we insert a label with inline asm to measure the
 * function. in addition to that, it should not call any non-forceinlined
 * functions to avoid generating a PC …
Run Code Online (Sandbox Code Playgroud)

c embedded llvm clang low-level

5
推荐指数
1
解决办法
801
查看次数