diff options
Diffstat (limited to 'csrc')
-rw-r--r-- | csrc/mkf_asm.asm | 2 | ||||
-rw-r--r-- | csrc/mkf_asm_data.c | 16 |
2 files changed, 16 insertions, 2 deletions
diff --git a/csrc/mkf_asm.asm b/csrc/mkf_asm.asm index 2a9d9b1..7a5d0b6 100644 --- a/csrc/mkf_asm.asm +++ b/csrc/mkf_asm.asm @@ -11,7 +11,7 @@ extern cfcn_004551bb extern cfcn_00455040 fcn_00455040: -;jmp cfcn_00455040 +jmp cfcn_00455040 push ebp mov ebp, esp push ebx diff --git a/csrc/mkf_asm_data.c b/csrc/mkf_asm_data.c index 032034a..555f861 100644 --- a/csrc/mkf_asm_data.c +++ b/csrc/mkf_asm_data.c @@ -669,8 +669,22 @@ void cfcn_00455040(void *arg1, void *arg2) bx -= 0xfd; void *old_esi = esi; /* push esi */ esi = edi - 1 - dx; - memcpy(edi, esi, bx); /* using rep movsb */ + + /* the following is a little bit tricky, + * if we use memcpy/memmove, the picture is broken + */ +#if 1 + ecx = bx; + do { + *(uint8_t*)edi = *(uint8_t*)esi; + edi++; + esi++; + ecx--; + } while (ecx); +#else + memmove(edi, esi, bx); /* using rep movsb */ edi += bx; /* by movsb */ +#endif esi = old_esi; /* pop esi */ ecx = old_ecx; /* restore ecx */ } |