Hi Grischka,

I am very new here, nice to meet you! I fixed the issues:
https://github.com/gynt/tinycc/pull/2
Let me know if I should push this to mob or whether you want to have a look
first.
I hope this is "the route that's already proven to work instead of trying
to be smart" you meant.

One note:
> ECX may get overwritten when other params are loaded
The "this" parameter is always the last one to be loaded (first argument),
so I don't think it can get overwritten by other params.
EAX and ECX are scratch registers that can be clobbered after a function
call, is this true in tinycc too?
To make sure ECX isn't also used in an indirect call, I wrote it now such
that it throws an error if ECX is used... Not very pretty, but good to know
if it happens.

Best of wishes,

Gynt

On Sat, Jun 8, 2024 at 1:03 AM grischka via Tinycc-devel <
tinycc-devel@nongnu.org> wrote:

> On 07.06.2024 15:03, Edward Gynt wrote:
> > I am having trouble reproducing your issue. My .exe files output the
> correct information. The "C file" code you mention doesn't mark main as a
> __thiscall, but your decompiled function lists sub_401000 as __thiscall.
> Why?
> > I don't own IDA so I can't reproduce with IDA.
>
> Hi Ed,
>
> honestly there are several issues with your patch.
> - thiscall_nb_regs uninitialized :
>       causes compiled code crash mostly
> - load(get_reg(RC_ECX), vtop) :
>       ECX may get overwritten when other params are loaded
> - too much code and funny variables (int func_call2) anyway seen that
>    FUNC_THISCALL is identical to FUNC_FASTCALLW except fastcall_nb_regs =
> 1;
>    instead of = 2;
>
> So you'd really better go along the route that's already proven to
> work instead of trying to be smart ;)
>
> -- gr
>
> > What I do notice is that using i386-win32-tcc.exe (compiled with gcc or
> tcc) I get identical output to before my commit.
> > With tcc.exe (compiled with gcc or tcc, which in turns was built with
> build-tcc.bat -x), I get the situation that ecx is stored in the stack and
> then moved into eax. Very strange.
> > So the x86_64 build is affected. Before I start digging into the code
> (misplaced #ifdef somewhere?) I want to verify the byte code with you to
> make sure we are talking about the same issue.
> > Can you post yours (objdump -D) ?
> >
> > Compiled with version on branch mob after my commit:
> >
> > 00401000 <.text>:
> >    401000:       55                      push   %ebp
> >    401001:       89 e5                   mov    %esp,%ebp
> >    401003:       81 ec 04 00 00 00       sub    $0x4,%esp
> >    401009:       90                      nop
> >    40100a:       89 4d fc                mov    %ecx,-0x4(%ebp)
> >    40100d:       8b 45 fc                mov    -0x4(%ebp),%eax
> >    401010:       50                      push   %eax
> >    401011:       b8 00 20 40 00          mov    $0x402000,%eax
> >    401016:       50                      push   %eax
> >    401017:       e8 54 02 00 00          call   0x401270
> >    40101c:       83 c4 08                add    $0x8,%esp
> >    40101f:       b8 0b 20 40 00          mov    $0x40200b,%eax
> >    401024:       50                      push   %eax
> >    401025:       e8 4e 02 00 00          call   0x401278
> >    40102a:       83 c4 04                add    $0x4,%esp
> >    40102d:       b8 00 00 00 00          mov    $0x0,%eax
> >    401032:       c9                      leave
> >    401033:       c3                      ret
> >
> > Compiled with version on branch mob before my commit:
> >
> > 00401000 <.text>:
> >    401000:       55                      push   %ebp
> >    401001:       89 e5                   mov    %esp,%ebp
> >    401003:       81 ec 00 00 00 00       sub    $0x0,%esp
> >    401009:       90                      nop
> >    40100a:       8b 45 08                mov    0x8(%ebp),%eax
> >    40100d:       50                      push   %eax
> >    40100e:       b8 00 20 40 00          mov    $0x402000,%eax
> >    401013:       50                      push   %eax
> >    401014:       e8 57 02 00 00          call   0x401270
> >    401019:       83 c4 08                add    $0x8,%esp
> >    40101c:       b8 0b 20 40 00          mov    $0x40200b,%eax
> >    401021:       50                      push   %eax
> >    401022:       e8 51 02 00 00          call   0x401278
> >    401027:       83 c4 04                add    $0x4,%esp
> >    40102a:       b8 00 00 00 00          mov    $0x0,%eax
> >    40102f:       c9                      leave
> >    401030:       c3                      ret
> >
> >
> >
> > On Thu, Jun 6, 2024 at 5:30 PM HarukaMomono via Tinycc-devel <
> tinycc-devel@nongnu.org <mailto:tinycc-devel@nongnu.org>> wrote:
> >
> >     commit:3b943bec5de423e234b5f92d9a8f110ad66a85a1
> >     author:Gynt <g...@users.noreply.github.com <mailto:
> g...@users.noreply.github.com>>
> >                 Mon, 3 Jun 2024 19:52:34 +0800 (3 13:52 +0200)
> >     committer:Gynt <g...@users.noreply.github.com <mailto:
> g...@users.noreply.github.com>>
> >                      Mon, 3 Jun 2024 19:56:32 +0800 (3 13:56 +0200)
> >     tree:3c7fd4f944e9417b6bf2c95c21c9e8c9ee671b11
> >     parent:8cd21e91ccee3baf15ad2f8cba9cbc4b618695a0
> >
> >     envs: windows 10; gcc version 14.1.0 (MinGW-W64
> x86_64-ucrt-posix-seh, built by Brecht Sanders, r1)
> >
> >     In this branch, I built it using gcc, the build command:
> build-tcc.bat -x
> >
> >     C file:
> >     #include <stdio.h>
> >     #include <stdlib.h>
> >
> >     int main(int argc, const char **argv, const char **envp) {
> >     printf("argc = %d\n", argc);
> >     system("pause");
> >     return 0;
> >     }
> >
> >     Compile Commands:
> >     tcc.exe -std=c11 -m32 -o test.exe test.c
> >
> >     result:
> >     argc = 9908136
> >
> >     Decompile using IDA:
> >     int __thiscall sub_401000(void *this)
> >     {
> >        printf("arg num = %d\n", this);
> >        system("pause");
> >        return 0;
> >     }
> >
> >     There are missing parameters.
> >
> >
>  
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >
> >     百野悠
> >     antis...@qq.com
> >
> >     <
> https://wx.mail.qq.com/home/index?t=readmail_businesscard_midpage&nocheck=true&name=%E7%99%BE%E9%87%8E%E6%82%A0&icon=https%3A%2F%2Fthirdqq.qlogo.cn%2Fg%3Fb%3Dsdk%26k%3DOZI1461f3WfMVgfs9eVX5g%26s%3D100%26t%3D1556966029%3Frand%3D1647596762&mail=antisnow%40qq.com&code=
> >
> >     _______________________________________________
> >     Tinycc-devel mailing list
> >     Tinycc-devel@nongnu.org <mailto:Tinycc-devel@nongnu.org>
> >     https://lists.nongnu.org/mailman/listinfo/tinycc-devel
> >
> >
> >
> > _______________________________________________
> > Tinycc-devel mailing list
> > Tinycc-devel@nongnu.org
> > https://lists.nongnu.org/mailman/listinfo/tinycc-devel
> >
>
>
> _______________________________________________
> Tinycc-devel mailing list
> Tinycc-devel@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/tinycc-devel
>
_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to