标签: 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
查看次数

原始ssh连接(低级)

作为一个小型(大型)业余爱好项目,我已着手在C#中创建一个(非常原始的)ssh-2.0客户端.这是为了探索和更好地理解DH,并帮助我的加密熟悉:)

根据RFC 4253,我已经开始了这样的初始连接:

(省略不相关的变量预设等)

Random cookie_gen = new Random();
while ((ssh_response = unsecure_reader.ReadLine()) != null)
{
   MessageBox.Show(ssh_response);
   if (ssh_response.StartsWith("SSH-2.0-")
   {
      // you told me your name, now I'll tell you mine
      ssh_writer.Write("SSH-2.0-MYSSHCLIENT\r\n");
      ssh_writer.Flush();
      // now I should write up my supported (which I'll keep to the required as per rfc 4253)
      ssh_writer.Write(0x20); // SSH_MSG_KEXINIT
      byte[] cookie = new byte[16];
      for (int i = 0; i < 16; i++)
         cookie[i] = Convert.ToByte(cookie_gen.Next(0, 10));
      ssh_writer.Write(cookie); // cookie
      // and now for the …
Run Code Online (Sandbox Code Playgroud)

c# ssh low-level

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

TrueType 到 C 数组

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

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

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

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

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

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

c parsing text typography low-level

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

wifi上的蓝牙协议?

我希望通过基于物理Wi-Fi的传输实现蓝牙协议,如果这有意义的话.
基本上我的手机有蓝牙,我的笔记本电脑有Wi-Fi卡(802.11a/b/g).
我知道Wi-Fi的工作范围是2.412 GHz - 2.472 GHz,蓝牙的工作范围是2.402 GHz - 2.480 GHz.
我忍不住注意到这里的重叠.所以我的问题是:

  • 为了在Wi-Fi卡上以特定频率发送信号,我需要什么样的低级API(最好在C中,在Windows上)?
  • 我可以在此基础上实现蓝牙堆栈吗?

所以基本上,我可以使用我的Wi-Fi卡作为无线电发射器传输蓝牙吗?

谢谢

bluetooth low-level wifi

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

Java方法可以有超过255个局部变量吗?

iload爪哇操作码用来推动从本地变量阵列(LVA)的值压入操作数栈.

此操作码将单个字节作为参数(en.wikipedia.org/wiki/Java_bytecode_instruction_listings),用作LVA的索引.

如果LVA的一个元素始终是对象的引用(我想这不是静态方法的情况,但是现在让我们忽略它们),并且如果只使用一个字节作为索引(256个可能的值),那么一个方法如何访问超过255个不同的局部变量?

java jvm bytecode opcode low-level

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

编译器如何编译编译器?

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

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

compiler-construction machine-code low-level

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

如何确保一段代码永远不会离开CPU缓存(L3)?

最新的英特尔XEON处理器拥有30MB的L3内存,足以容纳薄型1管理程序.

我有兴趣了解如何在CPU中保留这样的Hypervisor,即防止被刷新到RAM,或者至少在发送到内存/磁盘之前加密数据.

假设我们使用裸机运行,我们可以使用DRTM(延迟启动)来引导它,例如我们从不受信任的内存/磁盘加载,但是如果我们可以解密()用于解密的秘密,我们只能加载真实的操作系统.操作系统,在设置了适当的规则以确保发送到RAM的任何内容都已加密后进行.

ps我知道T​​XT的ACEA又称ACRAM(认证代码执行区域又称认证代码RAM)据说有这样的保证(即它限制在CPU缓存中)所以我想知道是否可以在此周围做一些技巧.

pps这似乎超出了目前的研究范围,所以我实际上并不确定答案是否可行.

cpu hypervisor low-level trusted-computing cpu-cache

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

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
查看次数

如何将 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
查看次数