Author Topic: "Go" page is down  (Read 22122 times)

Offline HD1920.1

  • Jr. Member
  • *
  • Posts: 40
"Go" page is down
« on: December 21, 2014, 05:37:42 AM »
I know that GoLink is a popular linker here. But I have damaged my installation, so I wanted to download it again, but instead of the usual webpage, I get an error message (This domain is pending ICANN verification.). Does anybody know why it does not work any more?

PS: I use the usual address http://www.godevtool.com/Golink.zip.

Offline Frank Kotler

  • NASM Developer
  • Hero Member
  • *****
  • Posts: 2667
  • Country: us
Re: "Go" page is down
« Reply #1 on: December 21, 2014, 06:01:30 AM »
Dunno. Sounds like it could be bad news. Hope Jeremy's okay!

Could try here:
http://www.softpedia.com/get/Programming/Other-Programming-Files/GoLink.shtml#download

Or I think it's part of the NASMX package:
http://nasmx.sf.net

Best,
Frank


Offline HD1920.1

  • Jr. Member
  • *
  • Posts: 40
Re: "Go" page is down
« Reply #2 on: December 21, 2014, 06:56:44 AM »
These versions are pretty old. Does anyone out there have Jeremy´s mail address?

Offline encryptor256

  • Full Member
  • **
  • Posts: 250
  • Country: lv
  • Win64 .
    • On Youtube: encryptor256
Re: "Go" page is down
« Reply #3 on: December 21, 2014, 10:19:00 AM »
Look, on page http://www.godevtool.com/

that domain is suspended and Jeremy has not activated it yet.

This domain is pending ICANN verification.

Maybe Jeremy is pissed off.

ICANN Slogan: One Wold. One Internet. + Go Home Jeremy. This world is for money bags only, indie-freelance developers screw off.  :D

Well, I hope that he will be back.  :)
Encryptor256's Investigation \ Research Department.

Offline encryptor256

  • Full Member
  • **
  • Posts: 250
  • Country: lv
  • Win64 .
    • On Youtube: encryptor256
Re: "Go" page is down
« Reply #4 on: January 11, 2015, 10:38:28 AM »
Jeremy is Back! Web page is online!  :)
Encryptor256's Investigation \ Research Department.

Offline nasm32

  • Jr. Member
  • *
  • Posts: 25
Re: "Go" page is down
« Reply #5 on: March 31, 2015, 10:18:55 PM »
GoLink's hex handling is buggy, you can't redefine stack size or heap size and you are forced to use the default value. I assume the bug is involved with Jeremy Gordon using masm's hex to dword converter, which is buggy. His latest version haven't fixed it, so I have to assume he have never changed the stack size of any of his programs so far. (No recursive calls)
« Last Edit: March 31, 2015, 10:22:16 PM by nasm32 »

Offline Bryant Keller

  • Forum Moderator
  • Full Member
  • *****
  • Posts: 360
  • Country: us
    • About Bryant Keller
Re: "Go" page is down
« Reply #6 on: April 02, 2015, 05:00:53 AM »
GoLink's hex handling is buggy, you can't redefine stack size or heap size and you are forced to use the default value.

Not sure what you mean by "hex handling is buggy" but it does support /stackinit and /stacksize directives.

I assume the bug is involved with Jeremy Gordon using masm's hex to dword converter, which is buggy.

What makes you think Jeremy used MASM's hex to dword converter? (note: he didn't)

About Bryant Keller
bkeller@about.me

Offline nasm32

  • Jr. Member
  • *
  • Posts: 25
Re: "Go" page is down
« Reply #7 on: April 02, 2015, 10:09:13 PM »
GoLink's hex handling is buggy, you can't redefine stack size or heap size and you are forced to use the default value.

Not sure what you mean by "hex handling is buggy" but it does support /stackinit and /stacksize directives.

I assume the bug is involved with Jeremy Gordon using masm's hex to dword converter, which is buggy.

What makes you think Jeremy used MASM's hex to dword converter? (note: he didn't)

When you define stacksize and heapsize GoLink accepts only hexadecimal numbers. When you type it in the value is bad in the final executable, the lower part of the hex number becomes the upper part and it initializes a full 32 bit worth of stack space. I've tried to prefix it with 0xXXXXX  and tried adding h to the final number, tried without any prefix, I've tried all ways possible and it just does not produce the right hex number. My dumpbin is very honest about this, the program refuses to run too because the stack is way too large.

I solved this by switching to Polink, Polib and PoRc. Pelle's tools are quite good and full of options.
« Last Edit: April 03, 2015, 02:15:15 PM by nasm32 »

Offline Bryant Keller

  • Forum Moderator
  • Full Member
  • *****
  • Posts: 360
  • Country: us
    • About Bryant Keller
Re: "Go" page is down
« Reply #8 on: April 03, 2015, 10:07:49 PM »
When you define stacksize and heapsize GoLink accepts only hexadecimal numbers. When you type it in the value is bad in the final executable, the lower part of the hex number becomes the upper part and it initializes a full 32 bit worth of stack space.

This sounds like an issue with endianness. Intel processors are little-endian and expect strings of bytes to be stored with least significant byte first. So for example, if you want to store "47D5A8" in a DWORD you need to use "A8D54700" instead of "0047D5A8". If you're value is exceeding the 32-bit limit of <1.x versions of GoLink, you'll end up with the default value. 1.0 added full 64-bit stacksize/stackinit.

I solved this by switching to Polink, Polib and PoRc. Pelle's tools are quite good and full of options.

Yeah, Pelles C was my preferred C compiler under Windows, haven't used either in a very long time. :P

About Bryant Keller
bkeller@about.me

Offline nasm32

  • Jr. Member
  • *
  • Posts: 25
Re: "Go" page is down
« Reply #9 on: April 04, 2015, 08:21:44 AM »
I tried that too it only works with letters, it wraps around perfectly if you use letters, as soon as you have hex numbers with only digits, it's buggy again.

For the sake of being absolutely sure, I want the stack size to be 4096 bytes (1000 hex), how should I write it? I have tried these ways:

1000 = the result is 10000000
00001000 = the result is 10000000
10000000 = the result is 10000000
00000010 = the result is 10000000
00100000 = the result is 10000000
0010 = the result is 10000000
10 = the result is 10000000
100000 = the result is 10000000

It doesn't matter what order you put them and what digit you use, it produces the same number, all combinations.

When I type AABBCCDD it appears in the same endianness in the dumpbin, so it doesn't seem to treat it differently than the order you type it in. But I have given up on GoLink for PoLink so it's not really a problem to me. I kind of like PoLink. Pelle is a very professional guy when it comes to tools, all the way. Jeremy is a cool guy too, but he does seem to be a guy who takes "shortcuts" it doesn't have to be a bad thing, but I like people who are professional all the way.
« Last Edit: April 04, 2015, 08:34:56 AM by nasm32 »

Offline encryptor256

  • Full Member
  • **
  • Posts: 250
  • Country: lv
  • Win64 .
    • On Youtube: encryptor256
Re: "Go" page is down
« Reply #10 on: April 05, 2015, 07:17:21 AM »
This works for me:

Code: [Select]
golink /stacksize 200000h /entry main test.obj user32.dll
golink /stacksize 200000 /entry main test.obj user32.dll

This too:
Code: [Select]
golink /stacksize DEADBEEFh /entry main test.obj user32.dll
golink /stacksize DEADBEEF /entry main test.obj user32.dll




Bye.
« Last Edit: April 05, 2015, 07:21:24 AM by encryptor256 »
Encryptor256's Investigation \ Research Department.

Offline shaynox

  • Full Member
  • **
  • Posts: 118
  • Country: gr
Re: "Go" page is down
« Reply #11 on: April 05, 2015, 08:07:23 AM »
The /stacksize 0x200000 work but not for 0xDEADBEEF for my program x64, I have 12GB of RAM.

Offline encryptor256

  • Full Member
  • **
  • Posts: 250
  • Country: lv
  • Win64 .
    • On Youtube: encryptor256
Re: "Go" page is down
« Reply #12 on: April 05, 2015, 11:50:57 AM »
The /stacksize 0x200000 work but not for 0xDEADBEEF for my program x64, I have 12GB of RAM.

Hehe, yeah, I didn't tested runtime, but compiled and linked into exe file,
after that used objdump tool to find out if stack size has changed, and it did, even deadbeef was there.

Thought's:

User nasm32 want's:
Code: [Select]
10 = the result is 10000000to setup pretty small stack size. Question.
Would that work for windows GUI applications?

It would be the same as running fibonachi recursive function.
So, it would run out of stack space during recursion, if the input number is pretty big-super-mega-heavy.

Maybe one megabyte of stack size is default for windows gui exe applications.


Encryptor256's Investigation \ Research Department.

Offline nasm32

  • Jr. Member
  • *
  • Posts: 25
Re: "Go" page is down
« Reply #13 on: April 05, 2015, 12:02:19 PM »
0x200000 = the result is 20000000
0xDEADBEEF = the result is DEADBEEF

The last one worked for me (as expected, because it begins with a letter)

GoLink version 1.0.1.0 (Copyright 2002-2014)
Latest version.

And this is on a win32 platform, not 64. You can use 4096 stack reserve and commit as the absolute minimum, you don't need one full megabyte. If your program is recursing and the amount of recursive call is known you can adjust to find the perfect size, if it is unknown you have to give it a bigger stack than one would want to otherwise.

I'm not a very big fan of recursive calls, I use them rarely, quicksort for example. I'm more fan of replacing recursive calls with loops, it's a bit hard to do it sometimes but it can be done.

But on the other side of it, if your program utilizes 80% stack, 5% global, 10% heap, the end result is poisonous. You should keep everything on the stack because it keeps virtual addresses linearly, and it produces maximum cache efficiency. That's the good thing about the stack, it doesn't matter where you are, in what function, in what module, it is always in perfect "coordination" with the cache. If you have to have some globals, putting them at the start address of the stack is more wise than putting them in a global section. That usually requires that the base module starts within a function call so that it can set its variables up in that function, and also align the stack in the "root" function. When and if you need huge amount of memory later, using virtualalloc can adjust the base address for you, whatever base address you prefer (to prevent flushing out whatever you don't want to be flushed out). virtualalloc replaces globals in that way, and it's the fastest memory allocation api in windows so it's a good way to do it.
« Last Edit: April 05, 2015, 01:02:55 PM by nasm32 »