From: nisse@lysator.liu.se (Niels Möller) Cc: nettle-bugs@lists.lysator.liu.se Date: Thu, 23 Apr 2020 17:10:54 +0200
The "ecc" variable is a local defined like
const struct ecc_curve *ecc = ecc_curves[i];
(where ecc_curves is the array quoted below). And ecc_dup_jj is a top-level function, declared as
void ecc_dup_jj (const struct ecc_curve *ecc, mp_limb_t *r, const mp_limb_t *p, mp_limb_t *scratch);
The implementation is in the dll, so it is resolved by the dynamic linker. I've found this stackoverflow question which also asks about pointer equality with dlls: https://stackoverflow.com/questions/20517589/function-pointer-values-inside-...
And by "symbol", I mean a name that is handled in the linking process.
Then yes, you need to use GetProcAddress to obtain the real address of a function in a DLL. Then you can compare that with your table of function pointers. When you write code that directly calls a function whose implementation is in a DLL, you actually call through a jump table. You can clearly see that if you disassemble the code around such call.