Skip Menu |

This queue is for tickets about the Win32-API CPAN distribution.

Report information
The Basics
Id: 84268
Status: rejected
Priority: 0/
Queue: Win32-API

People
Owner: Nobody in particular
Requestors: rkeuchel [...] allgeier.com
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: Win32::API: Bug/Exception in call_asm_x86_msvc.asm
Date: Thu, 28 Mar 2013 17:41:36 +0000
To: "bug-Win32-API [...] rt.cpan.org" <bug-Win32-API [...] rt.cpan.org>
From: "Keuchel, Rainer" <rkeuchel [...] allgeier.com>
I get an exception in call_asm_x86_msvc.asm, raised at bad_esp. ESP and EBP do not match. Using the C version works. Why is the ASM-Version the default for MSVC? I compiled a fresh perl for testing and debugging this. The called DLL is also built with MSVC 16 and uses WINAPI calling convention. The signature is: Win32::API->Import("svapi32_vc100.dll", 'ULONG svapi_connect(LPVOID hsv,LPSTR s1,LPSTR s2,LPSTR s3,LPSTR s4,LPSTR s5,LPSTR s6,LPSTR s7,LPSTR s8,LPSTR s9, LPSTR s10)'); Compiler: Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 Build Log: nmake -f Makefile all -nologo C:\perl\5.16.3\bin\perl.exe C:\Perl\5.16.3\lib\ExtUtils\xsubpp -typemap C:\perl\5.16.3\lib\ExtUtils\typemap Callback.xs > Callback.xsc && C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e mv -- Callback.xsc Callback.c cl -c -GS- -nologo -GF -W3 -Od -MD -Zi -DDEBUGGING -DWIN32 -D_CONSOLE -DNO_STRICT -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DPERL_TEXTMODE_SCRIPTS -DUSE_PERLIO -Od -MD -Zi -DDEBUGGING -DVERSION=\"0.76_01\" -DXS_VERSION=\"0.76_01\" "-IC:\perl\5.16.3\lib\CORE" Callback.c Callback.c Running Mkbootstrap for Win32::API::Callback () C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e chmod -- 644 Callback.bs C:\perl\5.16.3\bin\perl.exe -MExtUtils::Mksymlists -e "Mksymlists('NAME'=>\"Win32::API::Callback\", 'DLBASE' => 'Callback', 'DL_FUNCS' => { }, 'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);" link -out:..\blib\arch\auto\Win32\API\Callback\Callback.dll -dll -nologo -nodefaultlib -debug -libpath:"c:\perl\5.16.3\lib\CORE" -machine:x86 "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'" Callback.obj C:\perl\5.16.3\lib\CORE\perl516.lib oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib -def:Callback.def Creating library ..\blib\arch\auto\Win32\API\Callback\Callback.lib and object ..\blib\arch\auto\Win32\API\Callback\Callback.exp if exist ..\blib\arch\auto\Win32\API\Callback\Callback.dll.manifest mt -nologo -manifest ..\blib\arch\auto\Win32\API\Callback\Callback.dll.manifest -outputresource:..\blib\arch\auto\Win32\API\Callback\Callback.dll;2 if exist ..\blib\arch\auto\Win32\API\Callback\Callback.dll.manifest del ..\blib\arch\auto\Win32\API\Callback\Callback.dll.manifest C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e chmod -- 755 ..\blib\arch\auto\Win32\API\Callback\Callback.dll C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e cp -- Callback.bs ..\blib\arch\auto\Win32\API\Callback\Callback.bs C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e chmod -- 644 ..\blib\arch\auto\Win32\API\Callback\Callback.bs cd .. C:\perl\5.16.3\bin\perl.exe C:\Perl\5.16.3\lib\ExtUtils\xsubpp -nolinenumbers -typemap C:\perl\5.16.3\lib\ExtUtils\typemap -typemap typemap API.xs > API.xsc && C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e mv -- API.xsc API.c cl -c -GS- -nologo -GF -W3 -Od -MD -Zi -DDEBUGGING -DWIN32 -D_CONSOLE -DNO_STRICT -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DPERL_TEXTMODE_SCRIPTS -DUSE_PERLIO -Od -MD -Zi -DDEBUGGING -DVERSION=\"0.76_01\" -DXS_VERSION=\"0.76_01\" "-IC:\perl\5.16.3\lib\CORE" API.c API.c ml -Zi -c call_asm_x86_msvc.asm Assembling: call_asm_x86_msvc.asm Running Mkbootstrap for Win32::API () C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e chmod -- 644 API.bs C:\perl\5.16.3\bin\perl.exe -MExtUtils::Mksymlists -e "Mksymlists('NAME'=>\"Win32::API\", 'DLBASE' => 'API', 'DL_FUNCS' => { }, 'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);" link -out:blib\arch\auto\Win32\API\API.dll -dll -nologo -nodefaultlib -debug -libpath:"c:\perl\5.16.3\lib\CORE" -machine:x86 "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'" API.obj call_asm_x86_msvc.obj C:\perl\5.16.3\lib\CORE\perl516.lib oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib -def:API.def Creating library blib\arch\auto\Win32\API\API.lib and object blib\arch\auto\Win32\API\API.exp if exist blib\arch\auto\Win32\API\API.dll.manifest mt -nologo -manifest blib\arch\auto\Win32\API\API.dll.manifest -outputresource:blib\arch\auto\Win32\API\API.dll;2 if exist blib\arch\auto\Win32\API\API.dll.manifest del blib\arch\auto\Win32\API\API.dll.manifest C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e chmod -- 755 blib\arch\auto\Win32\API\API.dll C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e cp -- API.bs blib\arch\auto\Win32\API\API.bs C:\perl\5.16.3\bin\perl.exe -MExtUtils::Command -e chmod -- 644 blib\arch\auto\Win32\API\API.bs Rainer Keuchel Entwicklungsleiter Enterprise Content Management [cid:imageb271b8.JPG@f9d174aa.46bf0687] Allgeier IT Solutions GmbH Hans-Bredow-Str. 60 28307 Bremen Tel: +49 (421) 43841294 Fax: +49 (421) 438419294 E-Mail: rkeuchel@allgeier.com Internet: www.allgeier-it.de ALLGEIER IT SOLUTIONS GmbH Amtsgericht Bremen | HRB 25242 Geschäftsführer: Hubert Rohrer, Johannes Häringslack, Ralf Nitzgen St.-Nr. 71/551/06446 | USt.-ID-Nr. DE114397847 Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail sind nicht gestattet. This message (and any associated files) is intended only for the use of bug-Win32-API@rt.cpan.org and may contain information that is confidential, subject to copyright or constitutes a trade secret. If you are not bug-Win32-API@rt.cpan.org you are hereby notified that any dissemination, copying or distribution of this message, or files associated with this message, is strictly prohibited. If you have received this message in error, please notify us immediately by replying to the message and deleting it from your computer. Any views or opinions presented are solely those of the author rkeuchel@allgeier.com and do not necessarily represent those of the company.

Message body is not shown because it is too large.

Download imageb271b8.JPG
image/jpeg 12.6k
imageb271b8.JPG
Download smime.p7s
application/x-pkcs7-signature 1.9k

Message body not shown because it is not plain text.

On Thu Mar 28 13:42:02 2013, rkeuchel@allgeier.com wrote: Show quoted text
> I get an exception in call_asm_x86_msvc.asm, raised at bad_esp. > ESP > and EBP do not match.
Your prototype is wrong. Either the func in the DLL is actually __cdecl because it doesn't explicitly say __stdcall or WINAPI in each declaration and wasn't compiled with -Gz and the default in Win32::API is always __stdcall unless specified otherwise (this is the opposite of Visual C and GCC's defaults), or it is a __stdcall which takes a different amount of args than you specified in the prototype string. Show quoted text
> > Using the C version works. Why is the ASM- > Version the default for MSVC? >
The inline assembly version was very inefficient compared to the ideal design, the inline assembly version copied the same data between memory and register 2-4 times redundantly before writing it to memory for the final time, also the call instruction appears 3 different times (but called only once) in the inline assembly version instead of once. The C version (still used with GCC) doesn't compare ESP to EBP to find wrong prototypes yet (not sure if the C version ever will). Show quoted text
> I compiled a fresh perl for > testing and debugging this. > The called DLL is also built with MSVC > 16 and uses WINAPI calling convention.
Are you sure? Show quoted text
> > The signature is: > Win32::API->Import("svapi32_vc100.dll", 'ULONG > svapi_connect(LPVOID hsv,LPSTR s1,LPSTR s2,LPSTR s3,LPSTR s4,LPSTR > s5,LPSTR s6,LPSTR s7,LPSTR s8,LPSTR s9, LPSTR s10)');
The above is probably a __cdecl in the DLL since __stdcall isn't specified anywhere and -Gr and -Gz weren't used (-Gd wasn't used either, but it is on by default). I made a test function below to try your prototype. Show quoted text
_______________________________________________ API_TEST_API ULONG svapi_connect(LPVOID hsv,LPSTR s1,LPSTR s2,LPSTR s3, LPSTR s4,LPSTR s5,LPSTR s6,LPSTR s7,LPSTR s8,LPSTR s9, LPSTR s10) { if(hsv == 0x0 && atoi(s1) == 1 && atoi(s2) == 2 && atoi(s3) == 3 && atoi(s4) == 4 && atoi(s5) == 5 && atoi(s6) == 6 && atoi(s7) == 7 && atoi(s8) == 8 && atoi(s9) == 9 && atoi(s10) == 10) return 2; else{ DebugBreak(); return 0; } }
___________________________________________________ this is fine, notice I changed the 1st parameter from LPVOID to ULONG (LPVOID is a char * in Win32::API, not an opaque pointer as normally thought of LPVOID)
_______________________________________________ use Win32::API; Win32::API->Import("api_test.dll", 'ULONG __cdecl svapi_connect(ULONG ' .'hsv,LPSTR s1,LPSTR s2,LPSTR s3,LPSTR s4,LPSTR s5,LPSTR s6,LPSTR s7,LPSTR s8,' .'LPSTR s9, LPSTR s10)'); die "bad return" if svapi_connect(0..10) != 2;
_______________________________________________ This causes "Unhandled exception at 0x7c812afb in perl.exe: 0xC0000028: An invalid or unaligned stack was encountered during an unwind operation." with 0.76_01.
_______________________________________________ use Win32::API; Win32::API->Import("api_test.dll", 'ULONG svapi_connect(ULONG ' .'hsv,LPSTR s1,LPSTR s2,LPSTR s3,LPSTR s4,LPSTR s5,LPSTR s6,LPSTR s7,LPSTR s8,' .'LPSTR s9, LPSTR s10)'); die "bad return" if svapi_connect(0..10) != 2;
_______________________________________________ I plan to change the RaiseException to a Perl catchable croak based on the opinions in http://perlmonks.org/?node_id=1024423 in a future 0.76_02. Also I might switch the RaiseException to a DebugBreak since RaiseException uses alot of C autos and changes esp/ebp alot (but ebp sort of points to the incoming args to RaiseException from Call_asm). Do you have another opinion of what to do when there is a prototype mistake?
Subject: RE: [rt.cpan.org #84268] Win32::API: Bug/Exception in call_asm_x86_msvc.asm
Date: Thu, 28 Mar 2013 21:11:16 +0000
To: "bug-Win32-API [...] rt.cpan.org" <bug-Win32-API [...] rt.cpan.org>
From: "Keuchel, Rainer" <rkeuchel [...] allgeier.com>
It's really stdcall. Sorry, I should have checked this.. Maybe I was biased because it worked in my old 5.14 ActiveState-Perl, which probably used the C version of "call" or an old asm version. I recompiled Win32::API for getting WriteMemory(), which was missing in the AS build. And others also use the DLL from C# so I thought it would be stdcall.. unsigned int __cdecl svapi_connect(...) push ebp mov ebp, esp push 0FFFFFFFEh push offset stru_1006F560 push offset __except_handler4 mov eax, large fs:0 push eax add esp, 0FFFFFF68h mov eax, ___security_cookie xor [ebp+ms_exc.registration.ScopeTable], eax xor eax, ebp mov [ebp+var_24], eax push ebx push esi push edi push eax lea eax, [ebp+ms_exc.registration] mov large fs:0, eax mov [ebp+ms_exc.old_esp], esp ... mov ecx, [ebp+ms_exc.registration.Next] mov large fs:0, ecx pop ecx pop edi pop esi pop ebx mov ecx, [ebp+var_24] xor ecx, ebp ; cookie call @__security_check_cookie@4 ; __security_check_cookie(x) mov esp, ebp pop ebp retn Show quoted text
> I plan to change the RaiseException to a Perl catchable croak based on the opinions in http://perlmonks.org/?node_id=1024423 in a future 0.76_02. Also > I might switch the RaiseException to a DebugBreak since RaiseException uses alot of C autos and changes esp/ebp alot (but ebp sort of points to the > incoming args to RaiseException from Call_asm).
Show quoted text
> Do you have another opinion of what to do when there is a prototype mistake?
Yes, a DebugBreak() woud be nice to find the reg mismatch, but most people i.e. using an ActiveState-Build of Perl would not have debug syms. Maybe do the DebugBreak() when IsDebuggerPresent() is true, else use croak. You could call IsDebuggerPresent() when api.dll is loaded. Thanks for your help and your work! Rainer Keuchel Entwicklungsleiter Enterprise Content Management Allgeier IT Solutions GmbH Hans-Bredow-Str. 60 28307 Bremen Tel: +49 (421) 43841294 Fax: +49 (421) 438419294 E-Mail: rkeuchel@allgeier.com Internet: www.allgeier-it.de ALLGEIER IT SOLUTIONS GmbH Amtsgericht Bremen | HRB 20924 Geschäftsführer: Hubert Rohrer, Johannes Häringslack, Ralf Nitzgen St.-Nr. 803/11449 | USt.-ID-Nr. DE114397847 Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail sind nicht gestattet. This message (and any associated files) is intended only for the use of bug-Win32-API@rt.cpan.org and may contain information that is confidential, subject to copyright or constitutes a trade secret. If you are not bug-Win32-API@rt.cpan.org you are hereby notified that any dissemination, copying or distribution of this message, or files associated with this message, is strictly prohibited. If you have received this message in error, please notify us immediately by replying to the message and deleting it from your computer. Any views or opinions presented are solely those of the author rkeuchel@allgeier.com and do not necessarily represent those of the company.
Download smime.p7s
application/x-pkcs7-signature 1.9k

Message body not shown because it is not plain text.

On Thu Mar 28 17:11:32 2013, rkeuchel@allgeier.com wrote: Show quoted text
> It's really stdcall. Sorry, I should have checked this..
Then why does it crash for you if it really is stdcall? Show quoted text
> > Maybe I > was biased because it worked in my old 5.14 ActiveState-Perl, which > probably used the C version of "call" or an old asm version.
Previous versions of Win32::API as far as I remember, didn't care if it was __cdecl or __stdcall, original esp from the XSUB is copied back in asm, "esp = *(void **)ebp; ebp = *(void **)esp; esp -= 4;" AKA "leave" or "mov esp, [ebp]; pop esp", so what the called C func left esp at was actually irrelevant (it can be esp == 0, and Call_asm didn't care). Show quoted text
> > I > recompiled Win32::API for getting WriteMemory(), which was missing > in the AS build.
OT: "unpack('P'," can read any memory, but you can't write to random memory from core Perl. The undocumented RtlMoveMemory in kernel32.dll in old Win32::APIs (0.68 and older) had to be cludgingly used before. Internet grapevine says RtlMoveMemory exists for VB Classic programmers to use. So I added a WriteMemory so that foreign memory allocators can more easily be used (some C func wants a LocalAlloc memory block to take ownership of and free when it wants, not malloc or Newx (PV buffer)). Show quoted text
> > And others also use the DLL from C# so I > thought it would be stdcall.. > > > unsigned int __cdecl > svapi_connect(...) > > push ebp > mov ebp, esp > push > 0FFFFFFFEh > push offset stru_1006F560 > push offset > __except_handler4 > mov eax, large fs:0 > push eax > add > esp, 0FFFFFF68h > mov eax, ___security_cookie > xor > [ebp+ms_exc.registration.ScopeTable], eax > xor eax, ebp > mov > [ebp+var_24], eax > push ebx > push esi > push edi > push > eax > lea eax, [ebp+ms_exc.registration] > mov large fs:0, > eax > mov [ebp+ms_exc.old_esp], esp > > ... > > mov ecx, > [ebp+ms_exc.registration.Next] > mov large fs:0, ecx > pop > ecx > pop edi > pop esi > pop ebx > mov ecx, > [ebp+var_24] > xor ecx, ebp ; cookie > call > @__security_check_cookie@4 ; __security_check_cookie(x) > mov > esp, ebp > pop ebp > retn >
This is a __cdecl function, "retn" would have a number after it if was a __stdcall. Show quoted text
>
> > I plan to change the
> RaiseException to a Perl catchable croak based on the opinions in > http://perlmonks.org/?node_id=1024423 in a future 0.76_02. Also > > I might switch the RaiseException to a DebugBreak since > RaiseException uses alot of C autos and changes esp/ebp alot (but > ebp sort of points to the
> > incoming args to RaiseException from
> Call_asm). >
> > Do you have another opinion of what to do when
> there is a prototype mistake? > > Yes, a DebugBreak() woud be nice > to find the reg mismatch, but most people i.e. using an > ActiveState-Build of Perl > would not have debug syms.
You can sort-of, barely really, figure it out by just going to memory watch window, put "esp" as the address, set view to "4 byte integers" then do mental arthmitic (I think) to put back esp 4 bytes back (return address from DebugBreak()). Show quoted text
> > Maybe do > the DebugBreak() when IsDebuggerPresent() is true, else use croak. > You could call IsDebuggerPresent() when api.dll is loaded. > Thanks for your help and your work! >
I like that idea, I forgot IsDebuggerPresent exists. Thanks for the idea.
On Thu Mar 28 17:11:32 2013, rkeuchel@allgeier.com wrote: Show quoted text
> It's really stdcall. Sorry, I should have checked this.. > > Maybe I > was biased because it worked in my old 5.14 ActiveState-Perl, which > probably used the C version of "call" or an old asm version. > > I > recompiled Win32::API for getting WriteMemory(), which was missing > in the AS build.
If you are the same Rainer Keuchel as in http://tech.groups.yahoo.com/group/wince-devel/message/459 , could you provide/attach what was in http://www.rainer-keuchel.de/wince/perl-win32-api.tar.gz ? I'd like to integrate what was in there (ARM support) into the official Win32::API.
Subject: AW: [rt.cpan.org #84268] Win32::API: Bug/Exception in call_asm_x86_msvc.asm
Date: Fri, 29 Mar 2013 11:21:07 +0100
To: <bug-Win32-API [...] rt.cpan.org>
From: "Rainer Keuchel" <keuchel [...] rainer-keuchel.de>
Here is the old code.. Unfortunatly there is no assembly magic. It just calls several functions with different numbers of args from 1 to 10. If you are the same Rainer Keuchel as in <http://tech.groups.yahoo.com/group/wince-devel/message/459> http://tech.groups.yahoo.com/group/wince-devel/message/459 , could you provide/attach what was in <http://www.rainer-keuchel.de/wince/perl-win32-api.tar.gz> http://www.rainer-keuchel.de/wince/perl-win32-api.tar.gz ? I'd like to integrate what was in there (ARM support) into the official Win32::API.
Download Win32-API-WINCE.rar
application/octet-stream 34k

Message body not shown because it is not plain text.

RT-Send-CC: keuchel [...] rainer-keuchel.de
On Fri Mar 29 06:24:29 2013, keuchel@rainer-keuchel.de wrote: Show quoted text
> Here is the old code.. Unfortunatly there is no assembly magic. It > just calls several functions with different numbers of args from 1 > to 10. >
Thank you for the ARM code. Are you still having x86/x64 Win32::API problems or can I close the ticket?
Subject: AW: [rt.cpan.org #84268] Win32::API: Bug/Exception in call_asm_x86_msvc.asm
Date: Tue, 9 Apr 2013 08:56:07 +0000
To: "bug-Win32-API [...] rt.cpan.org" <bug-Win32-API [...] rt.cpan.org>
From: "Keuchel, Rainer" <rkeuchel [...] allgeier.com>
You can close the ticket, cdecl works.. Mit freundlichen Grüssen Rainer Keuchel Rainer Keuchel Entwicklungsleiter Enterprise Content Management Allgeier IT Solutions GmbH Hans-Bredow-Str. 60 28307 Bremen Tel: +49 (421) 43841294 Fax: +49 (421) 438419294 E-Mail: rkeuchel@allgeier.com Internet: www.allgeier-it.de ALLGEIER IT SOLUTIONS GmbH Amtsgericht Bremen | HRB 20924 Geschäftsführer: Hubert Rohrer, Johannes Häringslack, Ralf Nitzgen St.-Nr. 803/11449 | USt.-ID-Nr. DE114397847 Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail sind nicht gestattet. This message (and any associated files) is intended only for the use of bug-Win32-API@rt.cpan.org and may contain information that is confidential, subject to copyright or constitutes a trade secret. If you are not bug-Win32-API@rt.cpan.org you are hereby notified that any dissemination, copying or distribution of this message, or files associated with this message, is strictly prohibited. If you have received this message in error, please notify us immediately by replying to the message and deleting it from your computer. Any views or opinions presented are solely those of the author rkeuchel@allgeier.com and do not necessarily represent those of the company. Show quoted text
-----Ursprüngliche Nachricht----- Von: Daniel Dragan via RT [mailto:bug-Win32-API@rt.cpan.org] Gesendet: Dienstag, 9. April 2013 07:09 An: Keuchel, Rainer Betreff: [rt.cpan.org #84268] Win32::API: Bug/Exception in call_asm_x86_msvc.asm <URL: https://rt.cpan.org/Ticket/Display.html?id=84268 > On Fri Mar 29 06:24:29 2013, keuchel@rainer-keuchel.de wrote:
> Here is the old code.. Unfortunatly there is no assembly magic. It > just calls several functions with different numbers of args from 1 > to 10. >
Thank you for the ARM code. Are you still having x86/x64 Win32::API problems or can I close the ticket?
Download smime.p7s
application/x-pkcs7-signature 1.9k

Message body not shown because it is not plain text.

Closed.