ult*_*tus 2 c++ inline-assembly
所以我想从文件中加载一组汇编指令,然后执行这些指令.
要么
我想从文件中再次加载已编译的机器代码(非exe)
我的想法:
到目前为止,我已经学会了足够的内联asm来轻松使用c/c ++变量.
asm volatile (
"mov %1, %%ecx;" // yes unnecessary, I know
"add %2, %%ecx;" // I know they're already loaded in a register
"mov %%ecx ,%0 ;"// just demonstrating what I've learned
:"=r"(address)
:"r"(address),"r"(offset)
:"%ecx"
);
Run Code Online (Sandbox Code Playgroud)
我已经开始学习操作码,我已经获得了一些x86手册.我(在某种程度上)了解硬件如何在基本级别上工作.
我知道我可以使用带有fstream的c ++将文件加载到内存中,我想知道是否有一种方法可以从该空间执行内存,或者它是否在内存的不可执行部分或某些内容中.
原因:
目前有几个原因我想这样做.我希望为我的程序创建一个基本的 encyption,用于运行程序的简单键.虽然我可以轻松地加密和解密实际代码,但我希望程序在每次运行时都不加密,并且永远不会存储在硬盘上.我知道几个问题,但是我对这样做非常感兴趣.
最后问题:
我可以从asm中的c ++程序中的内存空间执行机器代码吗?
是必要的吗?
是否有其他方法可以更有效地完成此任务,如果是,那些方法是什么?
我正在阅读我正在制作的鼠标共享程序的一些DLL注入(两台计算机彼此相邻,都有显示器,但是你只有一个鼠标/键盘.我想知道我在哪里可以找到关于这个主题的一些很好的资源?谷歌一直很有帮助,但我对一些IRC频道或类似的东西很感兴趣.无论如何,感谢阅读!
这听起来像你想要在一个单独的文件中编译一些x86程序集的JIT?
我可能误解了,当你说'记忆空间'时,你的封装是一个非常广泛的术语.我假设你并不是说你想用一组特定的程序集编译它,但是能够在运行时交换汇编指令吗?
阅读以下内容动态生成并执行x86代码
你会看到的
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
int main(int argc, char *argv[]) {
uint8_t *buf = mmap(NULL, 1000, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
buf[0] = 0xb8;
uint32_t u32 = 42;
memcpy(buf + 1, &u32, 4);
buf[5] = 0xc3;
if (mprotect(buf, 1000, PROT_EXEC | PROT_READ) < 0) {
fprintf(stderr, "mprotect failed: %s\n", strerror(errno));
return 1;
}
int (*ptr)(void) = (int (*)(void)) buf;
printf("return is %d\n", ptr());
return 0; }
Run Code Online (Sandbox Code Playgroud)
在这里,您要为缓冲区分配内存.将指令放入缓冲区,然后从分配的内存中创建一个函数指针.请注意,内存也受到保护.
阅读本文以便更好地理解,它还为您提供了一些Windows等价物.
| 归档时间: |
|
| 查看次数: |
1336 次 |
| 最近记录: |