问题标签 [kernel32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - 在 XP 系统上获取产品信息
GetProductInfo
(API 功能)似乎在 XP Professional 上崩溃,而它在 Windows 7 Ultimate 上完美运行。什么是它的替代品?
windows - 用于非感知可执行文件的 ASLR 和 Windows 系统 DLL?
来自微软文章:
地址空间布局随机化 (ASLR)
当系统启动时,ASLR 将可执行映像移动到随机位置,从而使漏洞利用代码更难以可预测的方式运行。对于支持 ASLR 的组件,它加载的所有组件也必须支持 ASLR。例如,如果 A.exe 使用 B.dll 和 C.dll,则这三个都必须支持 ASLR。默认情况下,Windows Vista 及更高版本将随机化系统 DLL 和 EXE,但 ISV 创建的 DLL 和 EXE 必须使用 /DYNAMICBASE 链接器选项选择支持 ASLR。
我不太明白。获取 Windows 上每个进程加载的基本系统 DLL:NtDll.dll
和kernel32.dll
.
如果有一个不知道的可执行文件,这些系统 DLL 会使用 ASLR 吗?也就是说,在 Win 7 上每次系统重新启动后,它们会在不同的基地址加载此可执行文件,还是在系统重新启动后总是在相同的基地址加载,就像在 Win XP 上一样?
为了更清楚我的意思:我的典型虚拟程序的启动堆栈将如下所示:
查看 asm BaseProcessStart
,我在我的 XP 框中看到:
现在我感兴趣的是以下内容:
在 Windows XP 上,无论我重新启动这台机器多少次,地址都将始终为 0x7C817054。如果我在带有 ASLR 的 Win7 上,如果加载 kernel32.dll 的可执行文件没有为 ASLR 启用,这个地址会在重新启动之间改变吗?
(注意:对我来说,atm.,这个地址只有一个小用例有用:在 Visual Studio 中,我只能为程序集级函数设置一个“数据断点”,即断点@0x7.. . - 如果我想中断特定的 ntdll.dll 或 kernel32.dll 函数,在 Windows XP 中我不必在重新启动之间调整断点。随着 ASLR 的启动(这个问题的范围),我将不得不改变重新启动之间的数据断点。)
c# - 在 WriteFile kernel32.dll 上检测到 PInvokeStackImbalance
从框架 2 迁移到框架 4 后,运行 WriteFile 函数时出现错误。
解决方案:
lpOverlapped 参数应该是一个 int32,它在 umanaged C++ 中是一个 unsigned long。
原始错误:
检测到 PInvokeStackImbalance 消息:对 PInvoke 函数 '' 的调用使堆栈不平衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。
windows - 我们可以 rebase kernel32.dll 吗?使得两个进程的加载地址不同
具体来说,我想知道同一会话中的两个进程的 kernel32.dll 加载地址是否可以不同?我想使用 createremote 线程,所以只是想知道远程进程中的 kernel32 加载地址是否与任何情况下的注入进程不同?
.net - .NET mscorlib.dll 和 Kernel32.dll 的关系
据我了解,需要输入/输出功能的应用程序必须与 Kernel32.dll 对话,后者又将请求发送到内核本身。然而,在 .NET 中,位于 mscorlib.dll 中的控制台类与任何其他应用程序一样,并不直接与内核对话,对吗?mscorlib.dll 是否必须将其请求发送到 Kernel32.dll 或者 .NET 是否具有绕过它的特殊特权?
有没有人对它的工作原理有深入的了解?
谢谢你。
c# - 如何在 C# 中远程控制 cmd.exe 进程
我真的被一个问题困住了(现在已经有 7 天了),在我发疯之前,我想我会征求意见。
我想做的基本上就是启动和远程控制一个cmd.exe进程。然而,StandardInput 和 StandardOutput 流不能完成这项工作,因为它们不是由等待用户输入的“mysql”等命令触发的。
所以我想要的只是读取 cmd.exe 控制台的内容并写入它。但是 write 方法应该能够触发一个新命令。
我尝试了很多,我很确定 kernel32.dll 会成功:
- 读取控制台输出()
- 写控制台输入()
- GetConsoleScreenBufferInfo()
- SetConsoleCursorPosition()
当然,我已经有一些工作,但我绝对不确定我是否走对了路。因此我不会发布任何代码,因为它可能只会让你感到困惑。
如果有人可以向我指出一个工作演示或教程或类似的东西,那就太棒了。即使它是 C++ 或 C - 总比没有好。
提前致谢。
梅维斯·科赫海姆
PS:请不要只发布 pinvoke 或 MSDN 的链接,我需要的有点复杂。似乎我没有足够的 winapi 经验独自到达那里:/
编辑:我必须根据你们发布的链接尝试一些我得到的新想法。我会回来并发布我的发现。谢谢你们的帮助...
c# - C# 中的 Windows CreateFile 返回无效句柄
我试图在 C# 应用程序中从 Kernel32.dll 调用 CreateFile 方法,并且每次都返回无效句柄。我已经看遍了,找不到解决这个问题的方法。以下是相关代码:
常数:
导入方法:
加载驱动程序的方法:
任何人都可以帮我解决问题吗?
.net - 在 Windows 窗体应用程序中访问控制台对象的最佳方法是什么?
我试图让我的 GUI 应用程序有一个 CLI 前端(而不是相反)。
我已经能够毫无问题地处理参数(感谢System.Environment.GetCommandLineArgs()
),但我很好奇获得将输出写入控制台的最佳方法是什么。
我找到了对 的引用AllocConsole()
,但不清楚这是否是唯一的方法,因为我更喜欢托管代码中显示的内容。
c# - 如何在 Mono.Cecil 中创建导出函数?
我究竟做错了什么?我正在尝试创建 LoadLibraryA 的导出函数并将其注入程序集中。
c# - ReadFile Kernel32 最大缓冲区大小
我正在使用 C# 直接从磁盘读取并调用 kernel32 ReadFile 方法。我注意到,对于较大的读取(当前仅读取单个块),缓冲区大小超出范围。
有谁知道这里读取缓冲区的最大大小?
如果是这样,当我有多余的内存要读入时限制缓冲区大小的目的是什么?我了解缓冲和保持小内存占用的概念,但为什么要强制我们使用小尺寸?也许只是旧 Win32 API 的产物?
编辑:收到的错误Marshal.GetLastWin32Error()
是“值不在预期范围内”。
我收到此错误之前的上限是 8192 字节(8KB - 因此我很困惑)。
提前致谢。