Some weird crashes
simendsjo
simen.endsjo at pandavre.com
Mon Feb 28 09:52:11 PST 2011
I'm trying to wrap the newest mysql c connector, but I get some weird
bugs. I don't know any assembly, so I don't even know if I've included
enough info.. I hope this is a small enough test case so someone can
understand the issue.
I've used implib on the included dll and rdmd and dmd 2.051 to compile.
// CORRECT
auto res = mysql_library_init(0, null, null);
auto cn = mysql_init(null);
auto oldcn = cn;
writeln(mysql_errno(cn));
assert(cn == oldcn);
auto err = mysql_errno(cn);
//assert(cn == oldcn); // notice this is commented out
mysql_close(cn);
mysql_library_end();
0040201A |. E8 F5B30300 CALL <JMP.&libmysql.mysql_server_init>
0040201F |. 6A 00 PUSH 0
00402021 |. E8 E8B30300 CALL <JMP.&libmysql.mysql_init>
00402026 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
00402029 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
0040202C |. FF75 F8 PUSH DWORD PTR SS:[EBP-8]
0040202F |. E8 D4B30300 CALL <JMP.&libmysql.mysql_errno>
00402034 |. 83C4 04 ADD ESP,4
00402037 |. E8 4C000000 CALL mytest_w.00402088
0040203C |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0040203F |. 3B45 FC CMP EAX,DWORD PTR SS:[EBP-4]
00402042 |. B9 01000000 MOV ECX,1
00402047 |. 74 02 JE SHORT mytest_w.0040204B
00402049 |. 8ACD MOV CL,CH
0040204B |> 894D F4 MOV DWORD PTR SS:[EBP-C],ECX
0040204E |. 74 0A JE SHORT mytest_w.0040205A
00402050 |. B8 1A000000 MOV EAX,1A
00402055 |. E8 662A0000 CALL mytest_w.00404AC0
0040205A |> FF75 F8 PUSH DWORD PTR SS:[EBP-8]
0040205D |. E8 A6B30300 CALL <JMP.&libmysql.mysql_errno>
00402062 |. 807D F4 00 CMP BYTE PTR SS:[EBP-C],0
00402066 |. 75 0A JNZ SHORT mytest_w.00402072
00402068 |. B8 1D000000 MOV EAX,1D
0040206D |. E8 4E2A0000 CALL mytest_w.00404AC0
00402072 |> FF75 F8 PUSH DWORD PTR SS:[EBP-8]
00402075 |. E8 88B30300 CALL <JMP.&libmysql.mysql_close>
0040207A |. E8 7DB30300 CALL <JMP.&libmysql.mysql_server_end>
0040207F |. 31C0 XOR EAX,EAX
00402081 |. 83C4 18 ADD ESP,18
00402084 |. C9 LEAVE
00402085 \. C3 RETN
// ERROR
auto res = mysql_library_init(0, null, null);
auto cn = mysql_init(null);
auto oldcn = cn;
writeln(mysql_errno(cn));
assert(cn == oldcn); // when the last assert is active, the above line
changes cn and thus fails.
auto err = mysql_errno(cn);
assert(cn == oldcn);
mysql_close(cn);
mysql_library_end();
0040201A |. E8 D5B30300 CALL <JMP.&libmysql.mysql_server_init>
0040201F |. 6A 00 PUSH 0
00402021 |. E8 C8B30300 CALL <JMP.&libmysql.mysql_init>
00402026 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
00402029 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
0040202C |. FF75 F8 PUSH DWORD PTR SS:[EBP-8]
0040202F |. E8 B4B30300 CALL <JMP.&libmysql.mysql_errno>
00402034 |. 83C4 04 ADD ESP,4
00402037 |. E8 30000000 CALL mytest_f.0040206C
0040203C |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0040203F |. 3B45 FC CMP EAX,DWORD PTR SS:[EBP-4]
00402042 |. 74 0A JE SHORT mytest_f.0040204E
00402044 |. B8 1A000000 MOV EAX,1A
00402049 |. E8 562A0000 CALL mytest_f.00404AA4
0040204E |> FF75 F8 PUSH DWORD PTR SS:[EBP-8]
00402051 |. E8 92B30300 CALL <JMP.&libmysql.mysql_errno>
00402056 |. FF75 F8 PUSH DWORD PTR SS:[EBP-8]
00402059 |. E8 84B30300 CALL <JMP.&libmysql.mysql_close>
0040205E |. E8 79B30300 CALL <JMP.&libmysql.mysql_server_end>
00402063 |. 31C0 XOR EAX,EAX
00402065 |. 83C4 18 ADD ESP,18
00402068 |. C9 LEAVE
00402069 \. C3 RETN
More information about the Digitalmars-d-learn
mailing list