the little bastard has converted them into dwords !
( actually, you can see them in "strings window" while analysing, just before it desepears )
So click on "dword_4019EA" and press 'U', it will undefine them like this:
seg000:004019EA 79 db 79h ; y
seg000:004019EB 6F db 6Fh ; o
seg000:004019EC 75 db 75h ; u
seg000:004019ED 72 db 72h ; r
seg000:004019EE 20 db 20h ;
seg000:004019EF 70 db 70h ; p
seg000:004019F0 72 db 72h ; r
seg000:004019F1 6F db 6Fh ; o
seg000:004019F2 67 db 67h ; g
seg000:004019F3 72 db 72h ; r
seg000:004019F4 61 db 61h ; a
Now you can do a "reanalyse program"
where IDA fucked, help him with 'U' and 'A' (ex: "your program")
you must have something like that:
seg000:004019EA 79 6F 75 72 20 70+ aYourProgram db 'your program',0
seg000:004019F7 69 6E 6E 75 6D 00 aInnum db 'innum',0 ; DATA XREF: seg000:00414044o
seg000:004019FD 6F 74 6E 75 6D 00 aOtnum db 'otnum',0 ; DATA XREF: seg000:00414048o
seg000:00401A03 6A 61 63 6B 00 aJack db 'jack',0 ; DATA XREF: seg000:0041404Co
seg000:00401A08 6E 6F 72 6D 61 6C+ aNormalise db 'normalise',0 ; DATA XREF: seg000:00414050o
seg000:00401A12 6D 75 6C 74 69 70+ aMultiply db 'multiply',0 ; DATA XREF: seg000:00414054o
seg000:00401A1B 64 69 76 69 64 65+ aDivide db 'divide',0 ; DATA XREF: seg000:00414058o
seg000:00401A22 69 6E 63 72 00 aIncr db 'incr',0 ; DATA XREF: seg000:0041405Co
seg000:00401A27 64 65 63 72 00 aDecr db 'decr',0 ; DATA XREF: seg000:00414060o
seg000:00401A2C 70 72 65 6D 75 6C+ aPremult db 'premult',0 ; DATA XREF: seg000:00414064o
seg000:00401A34 73 75 62 64 69 76+ aSubdiv db 'subdiv',0 ; DATA XREF: seg000:00414068o
seg000:00401A3B 66 64 73 69 7A 65+ aFdsize db 'fdsize',0 ; DATA XREF: seg000:0041406Co
seg000:00401A42 65 67 63 64 00 aEgcd db 'egcd',0 ; DATA XREF: seg000:00414070o
seg000:00401A47 63 62 61 73 65 00 aCbase db 'cbase',0 ; DATA XREF: seg000:00414074o
seg000:00401A4D 63 69 6E 6E 75 6D+ aCinnum db 'cinnum',0 ; DATA XREF: seg000:00414078o
Do you see all the DATA XREF ? go on it
ok, IDA did some good job first, then he fucked, he though it was some instructions
press 'U' every where he fucked
and press 'O' on the first offset (&"your program")
Now click on "aYourProgram" and press "*" to make an array, set on dlg box:
- number of elements: maximal possible size = 144
- item on line: 1
- element width: -1
- check "display indexes"
And OK!
note that the indexes are decimal (not hex).
So now we've got our table built.
'Alt+M' on it to save location
Let's see how to use it:
exemple: go to sub_402E6C
do you see a few lines after (press 'H' on the number to get in in decimal):
mov dword ptr [edx+eax*4+20h], 23
actually it will always be a: mov dword ptr [REG+REG*4+20h], index
click on "23" to highlight it, 'ctrl+m' to go to our table and look the highlighed index :D
This way, lookup all miracl calls.
But there is an exception, sub_40711C : we've got
mov dword ptr [edx+eax*4+20h], 105
and it's not trial_division !
Okey... grab the miracl sources.
seach for "MR_IN(105)" in all miracl sources
it's found in epoint_comp() and trial_division()
We got it.