如果我将所有控件放在EXE中,是否可以从外部访问,就像将它放在DLL中一样?
答案 0 :(得分:0)
所以,你所追求的是通常导出符号的概念,除非你做一些明确的事情,否则在Windows中编译exe时不会导出符号。现在,如果你在谈论.NET,那么问题就会有所不同。但是,我注意到你用安全标记了这个标签;出于安全考虑,我不会依赖这个事实。代码注入和其他攻击比这更复杂。
答案 1 :(得分:0)
正如BobbyShaftoe所说,这取决于你是使用托管代码还是非托管代码,但我会假设你使用的是非托管C或C ++。
基本上,编译后的可执行文件(在Windows的情况下为EXE或DLL)由一堆函数和全局变量组成,每个函数都在可执行文件的逻辑地址空间中有一个特定的位置(它被映射到物理内存地址)加载可执行文件时。)
如果有人知道其可执行文件中特定函数或变量的地址,那么就无法阻止它们使用它 - 但在DLL中,该信息实际上是可用的,因此人们实际上可以查找功能(以及您选择导出的功能)名称。
通常你会提供一个带有你的DLL的头文件,它会处理这个名字查找,因此他们只需要调用这些函数就好像它们是自己程序的一部分一样。