Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

map crush if you delete spawn point #50

Open
igroglaz opened this issue Jan 29, 2020 · 0 comments
Open

map crush if you delete spawn point #50

igroglaz opened this issue Jan 29, 2020 · 0 comments
Labels
bug Something isn't working

Comments

@igroglaz
Copy link
Owner

Map: beach_t1.alm : https://github.com/igroglaz/rom2maps/blob/master/3%20hard/beach_t1.alm

if I delete bottom respawn point - map starts to crush server with error:

[18.01.2020 10:52:59.448] Server started.
[18.01.2020 10:52:59.520] EXCEPTION DUMP:
eax=00000000h,ebx=0000000Dh,ecx=00000000h,edx=0018ED4Ch,
esp=0018ED10h,ebp=0018ED18h,esi=00000457h,edi=0217DAF8h;
eip=0059FF27h;
addr=0059FF27h,code=C0000005h,flags=00000000h
[18.01.2020 10:52:59.520] BEGIN STACK TRACE: 0x0059FF27h <= 0059C3DBh <= 0059BDC2h <= 004F1801h <= 0048E71Ch <= 004882AEh <= 005E0988h <= 005E0C3Eh <= 768F8E71h <= 768F90D1h <= 768FA66Fh <= 76925D00h <= 005DEA73h <= END STACK TRACE
[18.01.2020 10:52:59.525] Exception was caught, but there is no map. Not saving characters.

Warbeginner:
how such return could appear?

0059C3D6  |.  E8 00FBFFFF   CALL 0059BEDB                          ; \a2serv1.0059BEDB
!0059C3DB  |  8D4D EC       LEA ECX,[LOCAL.5]

из этого (обозримого даже в hiew):
0059FF10  /$  55            PUSH EBP                                 ; a2serv1.0059FF10(guessed Arg1)
0059FF11  |.  8BEC          MOV EBP,ESP
0059FF13  |.  83EC 08       SUB ESP,8
0059FF16  |.  894D F8       MOV DWORD PTR SS:[LOCAL.2],ECX
0059FF19  |.  8B45 08       MOV EAX,DWORD PTR SS:[ARG.1]
0059FF1C  |.  8B08          MOV ECX,DWORD PTR DS:[EAX]
0059FF1E  |.  894D FC       MOV DWORD PTR SS:[LOCAL.1],ECX
0059FF21  |.  8B55 08       MOV EDX,DWORD PTR SS:[ARG.1]
0059FF24  |.  8B45 FC       MOV EAX,DWORD PTR SS:[LOCAL.1]
!0059FF27  |.  8B08          MOV ECX,DWORD PTR DS:[EAX]
0059FF29  |.  890A          MOV DWORD PTR DS:[EDX],ECX
0059FF2B  |.  8B45 FC       MOV EAX,DWORD PTR SS:[LOCAL.1]
0059FF2E  |.  83C0 08       ADD EAX,8
0059FF31  |.  8BE5          MOV ESP,EBP
0059FF33  |.  5D            POP EBP
0059FF34  .  C2 0400       RETN 4

ZZYZX (in Russian from discord):

12:07]ZZYZX:А это не тот же самый краш где нулевой итем?
[12:08]ZZYZX:А удаление точки просто перезаписывает карту, вот оно и фиксится
[12:08]ZZYZX:Хотя посмотреть надо)
[12:10]ZZYZX:ух ты
[12:10]ZZYZX:Это вообще как
[12:12]ZZYZX:Выглядит как как будто во время итерации по списку (чуть ли не с помощью std::...::iterator) чего-то там оказывается нулл
[12:12]ZZYZX:Вопрос в том, почему нет проверки
[12:20]ZZYZX:Там такая конструкция странная которая не очень декомпилится идой
[12:20]ZZYZX:
Attachment file type: unknown
unknown.png
7.32 KB
[12:20]ZZYZX:Суть в том что sub_59BEDB принимает два аргумента
[12:21]ZZYZX:а arg_0, это аргумент как раз в 59AB40, которое и крашится
[12:21]ZZYZX:а хотя не)
[12:21]ZZYZX:Даже веселее
[12:21]ZZYZX:В 59AB40 вообще нету аргумента
[12:21]ZZYZX:Но при этом изнутри он читается
[12:21]ZZYZX:Как — мне непонятно
[12:22]ZZYZX:так
[12:22]ZZYZX:чё-т я куда-то не туда смотрю :D
[12:22]ZZYZX:Там стек чтоли кривой какой-то
[12:24]ZZYZX:0059FF27h <= 0059C3DBh это никак не получится, потому что перед 0059C3DBh стоит вызов 59BEDB а не 59FF10 -_-
[12:26]ZZYZX:Вывод, настоящий вызов находится внутри 59BEDB вот тут:
[12:26]ZZYZX:
Attachment file type: unknown
unknown.png
18.04 KB
[12:26]ZZYZX:Хоть стеку и не соответствует, зато ближайший)
[12:32]ZZYZX:У меня только один вопрос, на хуя это вообще делается
Attachment file type: unknown
unknown.png
6.88 KB
[12:32]ZZYZX:Этот код условно не делает вообще ничего
[12:32]ZZYZX:а, не, делает, кстати) он ставит a1=*a1, условно. Просто изнутри это выглядит как *a1 = **a1
[12:32]ZZYZX:В общем я примерно понял что происходит
[12:33]ZZYZX:Там какой-то linked list
[12:33]ZZYZX:Который кончается раньше
[12:33]ZZYZX:Чем указано в его размере (v23[3])
[12:34]ZZYZX:Происходит всё это мракобесие в конце загрузки карты
[12:34]ZZYZX:Скорее всего опять редактор какую-то дичь туда записал
[12:35]ZZYZX:Сохраните карту потом посмотреть чё с ней)
[12:35]ZZYZX:а. Был файл
[12:36]ZZYZX:В общем самый простой способ пофиксить конкретно это — проверять, что нулл (a1==0), перед вызовом 59FF10 (не внутри!)


temporary workaround on 'map' side - changed this respawn point to proper place..

@igroglaz igroglaz added bug Something isn't working Low priority labels Jan 29, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant