二进制文件中是否有对源文件的引用?我尝试在二进制文件上运行字符串,但找不到对列出的源文件的任何引用...
或者我是否必须在应用程序级别实现它?
来自:http://en.wikipedia.org/wiki/X86_calling_conventions
push c
push b
push a
call function_name
add esp, 12 ;Stack clearing
mov x, eax
Run Code Online (Sandbox Code Playgroud)
为什么我们需要显式地向ESP添加12以清除堆栈,因为被调用的函数应该将参数从堆栈中取出,因此恢复堆栈指针......?
另一个问题:
从理论上讲,可以实现变量参数函数,callee负责清理权限(例如,如果在寄存器中传递堆栈中的参数数量)?
我正在编写一个通过命名管道与用户态应用程序通信的驱动程序.userland应用程序通过调用CreateNamedPipe()创建命名管道,然后通过调用IOCTL将管道名称传递给驱动程序.然后驱动程序通过调用ZwCreateFile()打开管道.
然后userland应用程序命中一个循环,该循环读取来自管道的请求,处理请求并将结果写回管道,即:
while(1) {
ReadFromPipe
ProcessRequest
WriteToPipe
}
Run Code Online (Sandbox Code Playgroud)
驱动程序基本上将请求写入管道,然后直接读回答案:
WriteRequestToPipe
ReadAnswerFromPipe
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果在应用程序中发生WriteToPipe之前在驱动程序中发生ReadAnswerFromPipe,则ReadAnswerFromPipe永远不会返回.所以基本上做
WriteRequestToPipe
Sleep(10 seconds)
ReadAnswerFromPipe
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.
我为什么看到这个?
澄清:我使用两个不同的单向管道,尽管应用程序最终成功调用WriteToPipe,但ReadAnswerFromPipe调用永远不会返回...