Так что в основном я имею дело с псевдо-asm-кодом на Win32, и я пытаюсь сделать его повторно собранным.Как определить и использовать «массив структуры» в nasm-синтаксисе 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 кода/данных, как и выше не могут быть напрямую собраны NASM/MASM для Windows 32 бит. Так что я должен настроить этот код/данные ...
я искал на линии и найти определение структуры данных в 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 */
.........
Так что мой вопрос: Как изменить код ассемблера/данные для их повторной сборки?
Спасибо!
Привет наводчика, Спасибо! Я использую nasm и хорошо, в настоящее время я пытаюсь обойти эту проблему ... Но все же некоторые проблемы ... http://stackoverflow.com/questions/21892665/where-is-mtinit-ioinit-and-mtterm-defined -on-win32 ... Я не знаю, почему кто-то отрицает мой вопрос ... – computereasy
Я должен был следовать вашему решению, ха-ха – computereasy