首页
社区
课程
招聘
未解决 [求助]C#如何调用XEDParse实现汇编代码二进制编码?
发表于: 2019-10-6 09:16 10819

未解决 [求助]C#如何调用XEDParse实现汇编代码二进制编码?

2019-10-6 09:16
10819
x64dbg上看到,XEDParse被用来把汇编代码转成二进制代码。调用"XEDParse.dll"文件中的一个函数“XEDParseAssemble”就可以了,使用起来非常简单,除了被C使用外,网上有不少用易语言实现的软件。

本人想用C#也实现一个,奈何调用XEDParse.dll的总是不成功,不知到有没有用C#调用过没有?

头文件如下:
#ifndef _XEDPARSE_H
#define _XEDPARSE_H

#include <windows.h>

//XEDParse defines
#ifdef XEDPARSE_STATIC
#define XEDPARSE_EXPORT
#else
#ifdef XEDPARSE_BUILD
#define XEDPARSE_EXPORT __declspec(dllexport)
#else
#define XEDPARSE_EXPORT __declspec(dllimport)
#endif //XEDPARSE_BUILD
#endif

#define XEDPARSE_CALL //calling convention

#define XEDPARSE_MAXBUFSIZE 256
#define XEDPARSE_MAXASMSIZE 16

//typedefs
typedef bool (XEDPARSE_CALL* CBXEDPARSE_UNKNOWN)(const char* text, ULONGLONG* value);

//XEDParse enums
enum XEDPARSE_STATUS
{
    XEDPARSE_ERROR = 0,
    XEDPARSE_OK = 1
};

//XEDParse structs
#pragma pack(push,8)
struct XEDPARSE
{
    bool x64; // use 64-bit instructions
    ULONGLONG cip; //instruction pointer (for relative addressing)
    unsigned int dest_size; //destination size (returned by XEDParse)
    CBXEDPARSE_UNKNOWN cbUnknown; //unknown operand callback
    unsigned char dest[XEDPARSE_MAXASMSIZE]; //destination buffer
    char instr[XEDPARSE_MAXBUFSIZE]; //instruction text
    char error[XEDPARSE_MAXBUFSIZE]; //error text (in case of an error)
};
#pragma pack(pop)

#ifdef __cplusplus
extern "C"
{
#endif

XEDPARSE_EXPORT XEDPARSE_STATUS XEDPARSE_CALL XEDParseAssemble(XEDPARSE* XEDParse);

#ifdef __cplusplus
}
#endif

#endif // _XEDPARSE_H


只需要调用函数XEDParseAssemble就好,参数构造和调用,我尝试了很久,也没搞定。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 768
活跃值: (236)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
刚试了试,搞定了,分享一下。
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)]
        public struct XEDPARSE
        {
            public int x64;                        // use 64-bit instructions
            public UInt64 cip;                         //instruction pointer (for relative addressing)
            public int dest_size;                   //destination size (returned by XEDParse)
            public int cbUnknown;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = XEDPARSE_MAXASMSIZE)]
            public string dest;                        //destination buffer
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = XEDPARSE_MAXBUFSIZE)]
            public string instr;                       //instruction text
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = XEDPARSE_MAXBUFSIZE)]
            public string error;                       //error text (in case of an error)
        };

[DllImport("XEDParse.dll", EntryPoint = "XEDParseAssemble",CallingConvention = CallingConvention.Cdecl)]
        static extern int XEDParseAssemble(ref XEDPARSE xedparse);

void Test()
        {
            XEDPARSE parse = new XEDPARSE();
            parse.x64 = 0;
            parse.cip = 0;
            parse.instr = @"mov esp, ebp";

            int result=XEDParseAssemble(ref parse);
            ;
        }

2019-10-6 09:38
0
雪    币: 2324
活跃值: (5108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
   void Test()
        {
            XEDPARSE parse = new XEDPARSE();
            parse.x64 = 1;
            parse.cip = 0;
            parse.instr = "mov rax, 0x1234567ac";

            int result = XEDParseAssemble(ref parse);
            string tag = "";
            int l = parse.dest.Length;
            byte[] bytes = System.Text.Encoding.Default.GetBytes(parse.dest);
            for (int i = 0; i < parse.dest_size; i++)
            {
                tag += String.Format("{0:X2}", bytes[i]);
            }
            MessageBox.Show(tag);
        }
有问题啊··试试这代码
2019-10-6 10:57
0
雪    币: 768
活跃值: (236)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
值得怀疑 &nbsp;&nbsp;&nbsp;void&nbsp;Test() &nbsp;&nbsp;&nbsp;&nbsp;&nbs ...
编译通过,数据正常获取。大功告成。谢谢!
2019-10-6 19:24
0
雪    币: 2324
活跃值: (5108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
zmrbak 编译通过,数据正常获取。大功告成。谢谢!
你试试我上面那个汇编 mov rax, 0x1234567ac   64位模式的
2019-10-6 21:54
0
雪    币: 1042
活跃值: (560)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
asmjit好像也可以?
2019-10-7 12:17
0
雪    币: 63
活跃值: (738)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
zmrbak 刚试了试,搞定了,分享一下。[StructLayout(LayoutKind.Sequential,&nbsp;CharSet&nbsp;=&nbsp;CharSet.Ansi ...
问下有没有 XEDParse,机器码转汇编的例子
2022-11-15 08:20
0
游客
登录 | 注册 方可回帖
返回
//