所以基本上我正在处理 Win32 上的伪 asm 代码,并且我试图让它重新组装。
在代码中,我看到这样的数据结构:
errtable errentry <1, 16h>
errentry <2, 2>
errentry <3, 2>
errentry <4, 18h>
errentry <5, 0Dh>
.....
在 .text 部分,我看到如下代码:
cmp eax, dword ptr errtable.oscode[ecx*8]
mov eax, errtable.errnocode[ecx*8]
基本上像上面那样的 asm 代码/数据不能直接在 windows 32 位上由 NASM/MASM 重新组装。所以我必须调整这个代码/数据......
我在网上搜索,找到了C中数据结构的定义:
struct errentry {
unsigned long oscode; /* OS return value */
int errnocode; /* System V error code */
};
static struct errentry errtable[] = {
{ ERROR_INVALID_FUNCTION, EINVAL }, /* 1 */
{ ERROR_FILE_NOT_FOUND, ENOENT }, /* 2 */
{ ERROR_PATH_NOT_FOUND, ENOENT }, /* 3 */
{ ERROR_TOO_MANY_OPEN_FILES, EMFILE }, /* 4 */
{ ERROR_ACCESS_DENIED, EACCES }, /* 5 */
{ ERROR_INVALID_HANDLE, EBADF }, /* 6 */
{ ERROR_ARENA_TRASHED, ENOMEM }, /* 7 */
{ ERROR_NOT_ENOUGH_MEMORY, ENOMEM }, /* 8 */
.........
所以我的问题是:如何修改 asm 代码/数据以使其重新组装?
谢谢!