Articles of pipe理员

记忆中密码的一般实践

我正在写一个.NET(C#)的Windows应用程序来存储用户密码,如keypass,lastpass,roboforms等。 为了处理用户数据,我必须将其保存在内存中,这个数据还包含用户的密码。 现在我的问题是: 有人可以使用一些工具或内存转储读取内存数据? 如果是,那么如何? 有人可以分享这样的工具? 我尝试使用CurrProcess,HeapViewer,ProcessExplorer和ProcessView应用程序,但在内存转储中找不到任何私有数据, 我是否需要学习其他内容以确保内存密码的保护。 谢谢

使内存密集的后台应用程序“友好”

我有一个应用程序,需要定期处理大块的数据与一个计算平凡的algorithm。 事实certificate,我也可以通过将数据块保存在内存caching中来防止系统从硬盘访问中放慢速度。 该应用程序是一个低优先级的应用程序,所以我正在尽量减less它对整个系统的影响,这意味着使用额外的内存(可用时)来减lessCPU和硬盘驱动器的负载。 高速caching的数据只有64MB字节块,我在内存中的数据越多,程序在驱动器上的开销就越小。 我需要做的就是转储内存caching,只要系统上的其他应用程序需要比可用内存更多的物理内存,并且这样做的速度足够快,以至于用户从不觉得系统由于高内存需求而变慢。 我特别感兴趣的是如何在.NET应用程序中完成这项工作。

未定义的引用getprocessmemoryinfo @ 12

我想在Windows上使用C语言来计算当前进程的主要内存使用情况: windows.h psapi.h PROCESS_MEMORY_COUNTERS_EX pmc; GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)); SIZE_T physMemUsedByMe = pmc.WorkingSetSize; 它给了我错误: 未定义的引用getprocessmemoryinfo @ 12 任何想法如何解决这个问题? 我的编译器是mingw32-gcc.exe

其他进程的GetKeyboardLayoutName?

基本上,我想要做的是让GetKeyboardLayoutName返回其他进程的键盘ID(KLID)。 默认情况下,它只重新显示我的应用程序窗口的键盘ID。 我也试过GetKeyboardLayout,但是它返回一个不幸的HKL(它接受另一个窗口的hwnd)。 或者,如果有一种将HKL转换成KLID的方法,那也是很棒的,但是我怀疑是不是有这样的一个问题。 那么,我怎么能做到这一点呢? 我希望能够使用获得的KLID作为LoadKeyboardLayout函数的参数。

pipe理数据到Linux程序,期望TTY(terminal)

我有一个Linux程序拒绝运行,如果它的标准input/标准输出不是TTY(terminal设备)。 是否有一个易于使用的工具,将创build一个PTY,与新创build的TTY启动程序,并通过标准input/标准输出复制所有数据? 用例不是交互式的,而是脚本。 我正在寻找最轻量级的解决scheme,最好不要创buildTCP连接,也不需要安装太多的其他工具和库。

如何在Windows中获得COM端口的友好名称?

我有一个通过USB连接的GSM调制解调器。 调制解调器创build2个串行端口。 第一个自动连接到调制解调器,第二个在设备pipe理器中显示为“HUAWEI Mobile Connect – 3G PC UI Interface(COM6)” 第二个端口用于获取调制解调器的重要信息,如信号质量; 发送和接收短信; 和其他一些function。 我正在编写一个应用程序,将包装由第二个端口提供的一些function。 我需要的是确定哪个COM端口是备用端口的确定的火灾方法。 迭代端口并检查对“ATE0”的响应是不够的。 调制解调器的端口通常是编号较小的端口,拨号连接没有激活时,它将响应“ATE0”和第二个端口相同。 我正在考虑的是迭代端口并检查它们的友好名称,如在设备pipe理器中所示。 这样我可以将我的应用程序中的端口连接到设备pipe理器中标有“HUAWEI Mobile Connect – 3G PC UI Interface(COM6)”的端口。 我还没有find任何信息,这将允许我以编程方式获得该名称。

为什么OS不能使用整个64位进行寻址? 为什么只有48位?

我正在阅读“了解Linux内核”。 分页为64位体系结构 正如我们在前面的章节中看到的那样,32位微处理器通常使用两级分页。 但是,两级分页不适用于采用64位体系结构的计算机。 让我们用思维实验来解释为什么: 首先假设一个4 KB的标准页面大小。 由于1 KB覆盖2 10个地址的范围,因此4 KB覆盖2 12个地址,所以偏移字段为12位。 这会在表格和目录字段之间分配最多52位的线性地址。 如果我们现在决定只使用64位中的48位来寻址(这个限制使我们有一个舒适的256 TB地址空间!) ,其余的48-12 = 36位将不得不在表和字段字段之间拆分。 如果我们现在决定为这两个字段中的每一个保留18位,则每个进程的Page Directory和Page Table都应该包含2 18个条目,即超过256,000个条目。 “如果我们现在决定只使用64位中的48个寻址”。 为什么? &为什么只有48位? 为什么不是其他号码? 那么,我只是一个普通的PC用户和程序员。 它只是很难相信,32位寻址,即每个进程的4GB(2GB / 3GB更加正确)地址空间是一个限制。 如果你真的遇到这个限制。 请给我举个例子。 这个窗口的限制是什么? 我知道虚拟内存!=物理内存和处理器地址引脚与虚拟内存无关。 这是一个完全不同的问题。 如何知道处理器的地址引脚数(=地址总线的大小)。 http://ark.intel.com处理器的规格不包含此规格。 回答: 第一个问题见Paul Betts的答案是合理的。

如何改变另一个进程的内存空间的值

如果你能帮助我解决这个困境。 现在,我知道C \ C ++,我知道ASM,我知道DLL注入,我知道虚拟内存寻址,但我不知道像CheatEngine和其他软件如何pipe理在另一个进程中更改variables的值。 对于那些不知道的人来说,第三方的金手指引擎工具可以扫描程序内存空间的值,并确定具有给定值的variables的位置,并对其进行修改。 我的问题是,他们是如何做到的? 给定一个地址,如果我要写C代码,我怎么能改变属于另一个进程的那个地址的值而不会得到一个无效的寻址错误? 谢谢。

RAM如何分配?

这是关于计算机科学的一个小问题:ram如何分配? 例如,我使用Windows。 我可以知道一个程序使用哪个地址吗? Windows如何分配内存? 连续的还是不连续的? 在Linux操作系统上它是一样的吗? 而且,我可以通过程序访问整个公羊吗? (我不相信,但是…) 你知道这个有什么好的讲座/文档吗?

如何从一个subprocess的STDOUT接收输出,而不会阻塞或阻止

我有一个长期运行的基于控制台的应用程序Sender ,它使用非缓冲输出(如cout << "Message" << flush()将简单文本发送到STDOUT。 我想创build一个MFC对话框的应用程序(名为Receiver )启动Sender并可以读取它的输出。 Receiver也应该能够检测到Sender已经死亡,或者如果愿意的话可以杀死Sender者。 Sender对Reciever一无所知,我不能改变Sender的代码。 我的第一个尝试是创buildpipe道的subprocessredirectSTDIN和STDOUT,并使用asynchronousReadFileEx调用读取Sender的数据。 这不能正常工作, 我已经发布了一个关于这些具体问题的单独的线程 。 我的问题是,我应该如何以一般的build筑术语来做这件事? 我不希望Receiver的主循环阻塞或轮询,而应该使用Wait函数的一些风味。