VC#.net ASM 汇编讨论

相思梦 2014-06-01 11:57:52

[DllImportAttribute("Kernel32.dll", EntryPoint = "VirtualAlloc")]
public static extern IntPtr VirtualAlloc(IntPtr address, int size, uint allocType, uint protect);
[DllImportAttribute("Kernel32.dll", EntryPoint = "VirtualFree")]
public static extern bool VirtualFree(IntPtr address, int size, uint freeType);
const uint MEM_COMMIT = 0x1000;
const uint MEM_RESERVE = 0x2000;
const uint PAGE_EXECUTE_READWRITE = 0x40;
const uint MEM_RELEASE = 0x8000;


static string GetCpuName() // 取CPU名称
{
byte[] codeBytes = { 96, 184, 2, 0, 0, 128, 15, 162, 139, 117, 252, 54, 137, 6, 54, 137, 94, 4, 54, 137, 78, 8, 54, 137, 86, 12, 184, 3, 0, 0, 128, 15, 162, 54, 137, 70, 16, 54, 137, 94, 20, 54, 137, 78, 24, 54, 137, 86, 28, 184, 4, 0, 0, 128, 15, 162, 54, 137, 70, 32, 54, 137, 94, 36, 54, 137, 78, 40, 54, 137, 86, 44, 97 };
IntPtr handle = IntPtr.Zero;
handle = VirtualAlloc(IntPtr.Zero, codeBytes.Length, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
return null;
}


' PUSHAD
' MOV EAX, 80000002
' CPUID
' MOV ESI, DWORD PTR SS:[EBP-4]
' MOV DWORD PTR SS:[ESI], EAX
' MOV DWORD PTR SS:[ESI+4], EBX
' MOV DWORD PTR SS:[ESI+8], ECX
' MOV DWORD PTR SS:[ESI+C], EDX
' MOV EAX, 80000003
' CPUID
' MOV DWORD PTR SS:[ESI+10], EAX
' MOV DWORD PTR SS:[ESI+14], EBX
' MOV DWORD PTR SS:[ESI+18], ECX
' MOV DWORD PTR SS:[ESI+1C], EDX
' MOV EAX, 80000004
' CPUID
' MOV DWORD PTR SS:[ESI+20], EAX
' MOV DWORD PTR SS:[ESI+24], EBX
' MOV DWORD PTR SS:[ESI+28], ECX
' MOV DWORD PTR SS:[ESI+2C], EDX
' POPAD


问题,当利用VirtualAlloc函数动态调用时程式
直接退出,求解如是
...全文
227 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
相思梦 2014-06-05
  • 打赏
  • 举报
回复
引用 3 楼 laviewpbt 的回复:
用C#嵌入汇编吃力不讨好,直接把核心部分用C内嵌汇编,然后编译成标准的DLL,供C#调用最方便。
也不能这样说。虽然用VC __asm{ } 汇编代码放置进出。封装类库即可实现 但我们的主题是讨论C#自身实现汇编
laviewpbt 2014-06-03
  • 打赏
  • 举报
回复
用C#嵌入汇编吃力不讨好,直接把核心部分用C内嵌汇编,然后编译成标准的DLL,供C#调用最方便。
jwh2004 2014-06-03
  • 打赏
  • 举报
回复
同意楼上,用VC的ATL方式编程生成dll,然后C#调用dll。 将汇编嵌入在VC中。
相思梦 2014-06-02
  • 打赏
  • 举报
回复
DEP早就关了,没用。
E可以实现,C#死程序
devmiao 2014-06-01
  • 打赏
  • 举报
回复
需要关掉操作系统的DEP(数据执行保护)功能。Win7需要权限,并且禁用杀毒软件。
软件功能: 可用于对VC++、C++ Builder、Delphi、VB、C/C++、ASM、Java、C#、SQL 等程序源码进行详细的统计,可以准确的分析出程序中代码行、注释行和空白行的行数。程序会自动根据你选择的文件类型选择相应的统计方式,并将所有文件的分析结果进行汇总,便于方便直观的对软件项目的代码量进行全面的评估。本软件是绿色软件,不需要安装,展开到任意目录,直接运行即可。 1、 支持VC++、VC.Net项目文件的统计方式。 2、 支持C++ Builder项目文件的统计方式。 3、 支持C/C++文件 .cpp 和 .h 的文件统计。 4、 支持同时多个文件的统计方式。 5、 支持同时多种文件类型的统计方式。 6、 支持VB项目文件和 .frm 和 .bas 文件的统计。 7、 支持汇编文件 .asm 和 .inc 的统计。 8、 支持Delphi项目文件 .dpr 和 .pas、.dfm 文件的统计。 9、 支持C#项目文件 .csproj 的直接统计及 .cs 文件的统计。 10、支持Java文件 .java 的统计。 11、支持SQL文件 .sql 的统计。 12、支持 *.* 文件类型的自动分析统计。 13、支持自定义一次选择多个目录的统计方式。 14、支持用户自定义文件统计类型及统计方法。 15、支持htm,excel,csv,txt等多种存盘文件类型。 16、支持统计结果的直接打印输出。 17、支持命令行方式的文件及目录统计方式。 18、支持资源管理器右键关联的文件及目录快捷统计方式。 19、支持GUI和命令行方式下使用自定义配置文件进行统计的方式。

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧