-
Notifications
You must be signed in to change notification settings - Fork 137
Open
Description
HI, sorry for having posting on the wrong repo.
I modify my code to use MemorySharp instead.
Here is the code:
internal static string CPUIIDMemorySharp()
{
var sharp = new MemorySharp(System.Diagnostics.Process.GetCurrentProcess());
using (var memory = sharp.Memory.Allocate(24))
{
AssemblyTransaction fasmNet;
using (fasmNet = sharp.Assembly.BeginTransaction(memory.BaseAddress))
{
fasmNet.AddLine("use32"); //Tell FASM.Net to use x86 (32bit) mode
fasmNet.AddLine("PUSH EBX"); //{Save affected register}
fasmNet.AddLine("PUSH EDI");
fasmNet.AddLine("MOV EDI, EAX"); //{@Resukt}
fasmNet.AddLine("MOV EAX, 1");
fasmNet.AddLine("DW $A20F"); //CPUID Command}
fasmNet.AddLine("STOSD"); //{ CPUID[1]}
fasmNet.AddLine("MOV EAX, EBX");
fasmNet.AddLine("STOSD"); //{CPUID[2]}
fasmNet.AddLine("MOV EAX, ECX");
fasmNet.AddLine("STOSD"); //{CPUID[3]}
fasmNet.AddLine("MOV EAX, EDX");
fasmNet.AddLine("STOSD"); //{CPUID[4]}
fasmNet.AddLine("POP EDI"); //{Restore registers}
fasmNet.AddLine("POP EBX");
fasmNet.AddLine("RETN"); // in cdecl calling convention, return value is stored in EAX; so this will return both params added up
}
var myAssemblyFunction = Marshal.GetDelegateForFunctionPointer<CpuIDDelegate>(memory.BaseAddress);
CpuIdResult result = myAssemblyFunction(1);
int cpuid1 = result.Eax;
int cpuidpluscomplement = cpuid1 & 0x0FFF7FFF;
string converted = cpuidpluscomplement.ToString("X8");
return converted;
}
I end with the same problem, if i execute this code first, i have a value in
CpuIdResult result = myAssemblyFunction(1);
int cpuid1 = result.Eax;
If i made a call to a P/Invoke method first, the struct CpuIdResult has all this properties to 0.
When i first call MemorySharp

When i call a P/Invoke method before calling MemorySharp:

Here is the modified example /repro project.
ConsoleApp1.zip
I'm pretty sure i'm missing something but what...
I hope you will have the time to take a look, and maybe a lead for me
Originally posted by @smardine in #26 (comment)
Metadata
Metadata
Assignees
Labels
No labels