digitalmars.D - GDC Explorer - an online disassembler for D
- Andrei Alexandrescu (6/6) Sep 20 2012 I've met Matt Goldbolt, the author of the GCC Explorer at
- Iain Buclaw (6/12) Sep 21 2012 That's awesome. :-)
- Andrej Mitrovic (2/3) Sep 21 2012 Integrating this with dpaste would be aweee..sooome!
- nazriel (11/15) Sep 21 2012 http://dpaste.dzfl.pl/news/change-log---v0.82
- Jacob Carlborg (4/9) Sep 21 2012 That's pretty cool.
- Jens Mueller (6/8) Sep 21 2012 This is not a disassembler. It just stops compilation before the
- Bernard Helyer (2/10) Sep 21 2012 You are both correct and incredibly pedantic. :P
- Iain Buclaw (7/19) Sep 21 2012 Half correct and incredibly pedantic. :-)
- Iain Buclaw (6/24) Sep 21 2012 And if it doesn't then I must be incredibly confused at this hour in
- Jens Mueller (3/28) Sep 21 2012 How do I use the objdump mode in the web interface?
- Ellery Newcomer (2/4) Sep 21 2012 And very nice to have demangled names in assembly.
- Jens Mueller (5/12) Sep 21 2012 You can pipe your assembly code to ddemangle if there is some other tool
- bearophile (12/19) Sep 21 2012 It's a nice idea. I'd like a way to filter the output to the
- bearophile (8/11) Sep 21 2012 It seems even this program produces a too much long asm listing
- bearophile (4/10) Sep 21 2012 Compiled with:
- Iain Buclaw (5/16) Sep 21 2012 Curse those templates. ;-)
- IntegratedDimensions (119/127) May 20 2018 Compare a simple C++ to D and the C++ output is far better:
I've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC. We got to talk a bit about D and he hacked together support for D by using gdc. Take a look at http://d.godbolt.org, I think it's pretty darn cool! I'm talking to him about integrating his work with our servers. Andrei
Sep 20 2012
On 21 September 2012 04:47, Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> wrote:I've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC. We got to talk a bit about D and he hacked together support for D by using gdc. Take a look at http://d.godbolt.org, I think it's pretty darn cool! I'm talking to him about integrating his work with our servers. AndreiThat's awesome. :-) -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';
Sep 21 2012
On 9/21/12, Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> wrote:snipIntegrating this with dpaste would be aweee..sooome!
Sep 21 2012
On Friday, 21 September 2012 at 07:40:11 UTC, Andrej Mitrovic wrote:On 9/21/12, Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> wrote:http://dpaste.dzfl.pl/news/change-log---v0.82 Those are in plans for all compilers but atm, we are struggling with problem of exceeding monthly bandwidth. Disassemble output takes a lot of space Anyways, I like design of this website! Very similar to dpaste, which rox ;> Looks very nice, probably we could adapt some ideas to dpaste, like __Compiler options__snipIntegrating this with dpaste would be aweee..sooome!
Sep 21 2012
On 2012-09-21 05:47, Andrei Alexandrescu wrote:I've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC. We got to talk a bit about D and he hacked together support for D by using gdc. Take a look at http://d.godbolt.org, I think it's pretty darn cool! I'm talking to him about integrating his work with our servers.That's pretty cool. -- /Jacob Carlborg
Sep 21 2012
Andrei Alexandrescu wrote:I've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC.This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code. But it's nice to have source code and assembly side by side. Jens
Sep 21 2012
On Friday, 21 September 2012 at 10:04:00 UTC, Jens Mueller wrote:Andrei Alexandrescu wrote:You are both correct and incredibly pedantic. :PI've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC.This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code.
Sep 21 2012
On 21 September 2012 11:17, Bernard Helyer <b.helyer gmail.com> wrote:On Friday, 21 September 2012 at 10:04:00 UTC, Jens Mueller wrote:Half correct and incredibly pedantic. :-) There's two modes. One is assembler output, the other is objdump output (which is a disassembler). -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';Andrei Alexandrescu wrote:You are both correct and incredibly pedantic. :PI've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC.This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code.
Sep 21 2012
On 21 September 2012 11:29, Iain Buclaw <ibuclaw ubuntu.com> wrote:On 21 September 2012 11:17, Bernard Helyer <b.helyer gmail.com> wrote:And if it doesn't then I must be incredibly confused at this hour in the morning (yawns). -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';On Friday, 21 September 2012 at 10:04:00 UTC, Jens Mueller wrote:Half correct and incredibly pedantic. :-) There's two modes. One is assembler output, the other is objdump output (which is a disassembler).Andrei Alexandrescu wrote:You are both correct and incredibly pedantic. :PI've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC.This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code.
Sep 21 2012
Iain Buclaw wrote:On 21 September 2012 11:29, Iain Buclaw <ibuclaw ubuntu.com> wrote:How do I use the objdump mode in the web interface? JensOn 21 September 2012 11:17, Bernard Helyer <b.helyer gmail.com> wrote:And if it doesn't then I must be incredibly confused at this hour in the morning (yawns).On Friday, 21 September 2012 at 10:04:00 UTC, Jens Mueller wrote:Half correct and incredibly pedantic. :-) There's two modes. One is assembler output, the other is objdump output (which is a disassembler).Andrei Alexandrescu wrote:You are both correct and incredibly pedantic. :PI've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC.This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code.
Sep 21 2012
On 09/21/2012 03:04 AM, Jens Mueller wrote:But it's nice to have source code and assembly side by side. JensAnd very nice to have demangled names in assembly.
Sep 21 2012
Ellery Newcomer wrote:On 09/21/2012 03:04 AM, Jens Mueller wrote:You can pipe your assembly code to ddemangle if there is some other tool that missing demangling. I did this for example when I looked at output from a statistical profiler. JensBut it's nice to have source code and assembly side by side. JensAnd very nice to have demangled names in assembly.
Sep 21 2012
Andrei Alexandrescu:I've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC. We got to talk a bit about D and he hacked together support for D by using gdc. Take a look at http://d.godbolt.org, I think it's pretty darn cool! I'm talking to him about integrating his work with our servers.It's a nice idea. I'd like a way to filter the output to the disassembly of just one (or few) functions, because otherwise the output risks being too much large. At my second try I have received this, I don't know why: <No output: Error: Command failed: cat: /tmp/gcc-explorer-compiler11285-17644-1vcygvl/output.S: No such file or directory core.exception.AssertError /usr/include/d2/4.6/std/stdio.d(989): Bug in File.readlnBye, bearophile
Sep 21 2012
I'd like a way to filter the output to the disassembly of just one (or few) functions, because otherwise the output risks being too much large.It seems even this program produces a too much long asm listing for the site: import std.stdio; void main() { writeln("%f", 1.5); } Bye, bearophile
Sep 21 2012
It seems even this program produces a too much long asm listing for the site: import std.stdio; void main() { writeln("%f", 1.5); }Compiled with: -O0 -march=native Bye, bearophile
Sep 21 2012
On 21 September 2012 14:49, bearophile <bearophileHUGS lycos.com> wrote:Curse those templates. ;-) -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';It seems even this program produces a too much long asm listing for the site: import std.stdio; void main() { writeln("%f", 1.5); }Compiled with: -O0 -march=native Bye, bearophile
Sep 21 2012
On Friday, 21 September 2012 at 03:46:12 UTC, Andrei Alexandrescu wrote:I've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC. We got to talk a bit about D and he hacked together support for D by using gdc. Take a look at http://d.godbolt.org, I think it's pretty darn cool! I'm talking to him about integrating his work with our servers. AndreiCompare a simple C++ to D and the C++ output is far better: class C { int x = 12; public: int foo(int y) { return y*x; } }; int main() { C* c = new C(); return c->foo(2); } VS class C { int x = 12; public: int foo(int y) { return y*x; } }; int main() { C c = new C(); return c.foo(2); } operator new(unsigned long) plt: new(unsigned long) GLIBCXX_3.4> push 0x1 jmp 400450 <.plt> main: push rbp mov rbp,rsp push rbx sub rsp,0x18 mov edi,0x4 call 400470 <operator new(unsigned long) plt> mov rbx,rax mov DWORD PTR [rbx],0x0 mov rdi,rbx call 4005bc <C::C()> mov QWORD PTR [rbp-0x18],rbx mov rax,QWORD PTR [rbp-0x18] mov esi,0x2 mov rdi,rax call 4005a4 <C::foo(int)> nop add rsp,0x18 pop rbx pop rbp ret nop C::foo(int): push rbp mov rbp,rsp mov QWORD PTR [rbp-0x8],rdi mov DWORD PTR [rbp-0xc],esi mov rax,QWORD PTR [rbp-0x8] mov eax,DWORD PTR [rax] imul eax,DWORD PTR [rbp-0xc] pop rbp ret nop C::C(): push rbp mov rbp,rsp mov QWORD PTR [rbp-0x8],rdi mov rax,QWORD PTR [rbp-0x8] mov DWORD PTR [rax],0xc nop pop rbp ret nop WORD PTR cs:[rax+rax*1+0x0] nop DWORD PTR [rax+rax*1+0x0] VS _Dmain: push rbp mov rbp,rsp sub rsp,0x10 call 14 <_Dmain+0x14> mov QWORD PTR [rbp-0x8],rax mov esi,0x2 mov rdi,rax mov rax,QWORD PTR [rax] rex.W call QWORD PTR [rax+0x28] leave ret add BYTE PTR [rax],al main: push rbp mov rbp,rsp sub rsp,0x10 mov DWORD PTR [rbp-0x10],edi mov QWORD PTR [rbp-0x8],rsi mov rsi,QWORD PTR [rbp-0x8] mov edi,DWORD PTR [rbp-0x10] call 22 <main+0x22> leave ret .text.d_dso_init: push rbp mov rbp,rsp push rax push rax push rax push 0x1 mov rdi,rsp call 26 <.text.d_dso_init+0x26> leave ret the C++ version is more verbose, gives explicit references to functions and methods while the D version requires you to hunt and peck.
May 20 2018