how to intercept calls to the file systems

I am interested in intercepting all system calls related to the file system and instead having my own code run. For example, calls to creat, write, close, lseek, getcwd, etc. My goal is to create a function like execve that captures all file I/O from the spawned program to an in memory filesystem managed by the calling process. This way the calling program can then inspect the output with no fi

如何拦截对文件系统的调用

我有兴趣拦截与文件系统相关的所有系统调用,而不是让自己的代码运行。 例如,创建,写入,关闭,lseek,getcwd等的调用。我的目标是创建一个像execve这样的函数,用于捕获从生成的程序到调用进程管理的内存文件系统中的所有文件I / O。 这样调用程序就可以检查输出而不会造成文件系统开销。 我的使用案例正在处理大型数字模拟程序,它们没有API或库。 这些程序只能通过输入和输出文件进行通信。 如果这些文件很大,则只需

Cancel a system call with ptrace()

For some security purpose, I use ptrace to get the syscall number, and if it's a dangerous call (like 10 for unlink), I want to cancel this syscall. Here's the source code for the test program del.c . Compile with gcc -o del del.c . #include <stdio.h> #include <stdlib.h> int main() { remove("/root/abc.out"); return 0; } Here's the security manager source code

用ptrace()取消系统调用

出于某种安全目的,我使用ptrace来获取系统调用号码,如果这是一个危险的调用(如10取消链接),我想取消这个系统调用。 这是测试程序del.c的源代码。 用gcc -o del del.c编译。 #include <stdio.h> #include <stdlib.h> int main() { remove("/root/abc.out"); return 0; } 这里是安全管理器源代码test.c 用gcc -o test test.c编译。 #include <signal.h> #include <syscall.h> #include

Minimal overhead way of intercepting system calls without modifying the kernel

Methods of which I'm aware of intercepting system calls are the following. Using ptrace, but this seems to have a high overhead. According to my knowledge, tools like strace also use ptrace internally. Using a kernel module to change the system call table, but according to my knowledge, this method is no more possible in later linux kernels. Using LD_PRELOAD. But this won't work i

在不修改内核的情况下拦截系统调用的最小开销方式

我知道拦截系统调用的方法如下。 使用ptrace,但这似乎有很高的开销。 据我所知,像strace这样的工具在内部也使用ptrace。 使用内核模块来更改系统调用表,但据我所知,这种方法在以后的Linux内核中不再可能。 使用LD_PRELOAD。 但是,如果您直接进行系统调用而不使用该系统调用的某些包装库函数,则这将不起作用。 所以你看到上面提到的所有方法都有缺陷。 所以我的问题是如何在不修改内核的情况下拦截系统调用,并

Why is the enumeration value from a multi dimensional array not equal to itself?

Consider: using System; public class Test { enum State : sbyte { OK = 0, BUG = -1 } static void Main(string[] args) { var s = new State[1, 1]; s[0, 0] = State.BUG; State a = s[0, 0]; Console.WriteLine(a == s[0, 0]); // False } } How can this be explained? It occurs in debug builds in Visual Studio 2015 when running in the x86 JIT. A release bu

为什么多维数组的枚举值不等于自身?

考虑: using System; public class Test { enum State : sbyte { OK = 0, BUG = -1 } static void Main(string[] args) { var s = new State[1, 1]; s[0, 0] = State.BUG; State a = s[0, 0]; Console.WriteLine(a == s[0, 0]); // False } } 这怎么解释? 它在运行在x86 JIT中的Visual Studio 2015中的调试版本中发生。 在x64 JIT中生成或运行的发行版按预期打印为True

How to build x86 and/or x64 on Windows from command line with CMAKE?

One way to get cmake to build x86 on Windows with Visual Studio is like so: Start Visual Studio Command prompt for x86 Run cmake: cmake -G "NMake Makefiles" path_to_source nmake One way to get cmake to build x64 on Windows with Visual Studio is like so: Start Visual Studio Command prompt for x64 Run cmake: cmake -G "NMake Makefiles" path_to_source nmake Using C

如何使用CMAKE从命令行在Windows上构建x86和/或x64?

使用Visual Studio获取cmake在Windows上构建x86的一种方式如下所示: 为x86启动Visual Studio命令提示符 运行cmake: cmake -G "NMake Makefiles" path_to_source NMAKE 使用Visual Studio获得cmake在Windows上构建x64的一种方法如下所示: 启动Visual Studio命令提示符为x64 运行cmake: cmake -G "NMake Makefiles" path_to_source NMAKE 使用Cmake,我如何编译一个或两个体系结构? (

Why doesn't Console.Writeline, Console.Write work in Visual Studio Express?

I just open a console application and I type Console.WriteLine("Test"); But the output window doesn't show this. I go to the output window with Ctrl+W,O But nothing shows up when I run my program, am I nuts or is this not supported in the visual studio 2010 express? Console.WriteLine将输出写入由应用程序打开的控制台窗口(想象一下打开命令提示符时出现的带白色文本的黑色窗口)。请改为尝试Sy

为什么Console.Writeline,Console.Write不能在Visual Studio Express中工作?

我只是打开一个控制台应用程序,然后输入 Console.WriteLine("Test"); 但是输出窗口不显示这个。 我用Ctrl + W,O进入输出窗口 但是当我运行我的程序时什么都没有显示出来,我是疯了吗,还是在visual studio 2010 express中不支持? Console.WriteLine将输出写入由应用程序打开的控制台窗口(想象一下打开命令提示符时出现的带白色文本的黑色窗口)。请改为尝试System.Diagnostics.Debug.WriteLine 。 在Solution Explor

How to get all instances from the module loaded in a Ninject kernel?

Ninject provides convenient way for separating bindings into modules and also the GetAll<T>() method of the IResolutionRoot to get all instances for the given type. I have multiple modules registering multiple classes implementing the same type, eg: interface IFoo { } class FooA : IFoo { } // in Module1 class FooB : IFoo { } // in Module2 class FooC : IFoo { } // in Module2 Is it possib

如何从模块中加载Ninject内核中的所有实例?

Ninject提供分离的绑定模块和也是方便的方式GetAll<T>()的方法IResolutionRoot获得对于给定类型的所有实例。 我有多个模块注册多个实现相同类型的类,例如: interface IFoo { } class FooA : IFoo { } // in Module1 class FooB : IFoo { } // in Module2 class FooC : IFoo { } // in Module2 在已经加载Module1的内核中加载Module2后, FooC通过请求IFoo来检索FooC的实例? 就像是: StandardKernel kernel = new

Configuring Ninject to return a list of results

I'm using Ninject to resolve dependencies and it's working swimmingly until now. In this example, I actually need a list of objects initialized based on data stored in my App.config. However, Ninject keeps returning an empty list. The snippet below is an example of what I tried. I've included the constructors for the class hierarchy for some context. public ServiceSchedulerBuild

配置Ninject以返回结果列表

我正在使用Ninject来解决依赖关系,并且直到现在它都在顺畅地运行。 在这个例子中,我实际上需要一个根据存储在我的App.config中的数据初始化的对象列表。 但是,Ninject不断返回一个空列表。 下面的代码片段就是我尝试过的一个例子。 我已经在一些上下文中包含了类层次结构的构造函数。 public ServiceSchedulerBuilder(IList<ITextExportService> textExportServices) { _textExportService = textExportServic

Request scope has already been disposed

I'm using Ninject and the extensions EventBroker and DependencyCreation in an MVC 3 application. I've installed and am using the Ninject.MVC3 package and therefore the OnePerRequestModule . I'm attempting to inject a service, called IParentService into a controller. IParentService has a dependency on ChildService created via the DependencyCreation extension (no hard reference).

请求范围已经处理完毕

我在MVC 3应用程序中使用Ninject和扩展EventBroker和DependencyCreation。 我已经安装并正在使用Ninject.MVC3软件包,因此也使用OnePerRequestModule 。 我试图将一个名为IParentService的服务注入到控制器中。 IParentService具有的依赖关系ChildService经由DependencyCreation扩展创建(没有硬参考)。 这两种服务都在本地事件代理实例( ParentService本地)上注册。 我希望IParentService可以根据请求作用域,并且我

ninject and enterprise library service locator dependant assemblies

I am using the Microsoft.Practices.ServiceLocation assembly in conjunction with ninject to aid in service loaction. I register my ninject kernel into the servicelocator provider method: var kernel = new StandardKernel(); //do bindings var locator = new NinjectServiceLocator(kernel); ServiceLocator.SetLocatorProvider(() => locator); The above code all works fine on machines that have the ent

ninject和企业库服务定位器相关的程序集

我正在将Microsoft.Practices.ServiceLocation程序集与ninject结合使用来帮助服务级别。 我将我的ninject内核注册到servicelocator提供者方法中: var kernel = new StandardKernel(); //do bindings var locator = new NinjectServiceLocator(kernel); ServiceLocator.SetLocatorProvider(() => locator); 上面的代码在安装了企业库的机器上(通过msi可执行文件)都可以正常工作。 我不能在生产环境中运行安装程序,所以