flat assembler
Message board for the users of flat assembler.

Index > Projects and Ideas > On the anniversary of fasm1.73.30 - fasmcore mod [fix No3]

Author
Thread Post new topic Reply to topic
ProMiNick



Joined: 24 Mar 2012
Posts: 795
Location: Russian Federation, Sochi
ProMiNick 21 Feb 2023, 18:26
Hello, community.
I glad to introduce fasmcore updates & new syntax that support stack tracking and it is ready for use.
Fasm at new syntax is selfhosted, source fasmwold.asm for compile new core with legacy fasms are present too.
Now you all could look & test how it is.
Critics & suggestions are very appreciated.
I would be happy if ideas of stack tracking would become a part of fasm1 or fasmg official releases.
(As always my syntaxes not friend with win32ax.inc because some its features already part of win32a.inc (conflict due to duplication), nothing except win32a.inc not adapted to use with new syntax)

[EDITED 22.02.2023]: attachment updated (part of mod in core left no changes, bug fixies & some optimizations in macros, all win32 examples ported to new syntax)

[EDITED 22.02.2023 again]: attachment updated (part of mod in core left no changes, bug fixies & some optimizations in PUSHD macro, by analogy added PUSHQ macro for x64 mode)

[EDITED 23.02.2023]: attachment updated (part of mod in core left no changes, by analogy added frame macro for x64 mode, again bug fixies & some optimizations in PUSHD & PUSHQ macro, added optimizations to locals covered support of both 32 & 64 bit, extended macroset in offmacro.inc)
previous bugfix makes bug of inability of selfhosting - fixed (exactly in PUSHD macro)


Description: fasm1.73.30 with modified core for stack tracking & and set of macros realizing that tracking, selfhosted, legacy fasm hosted.
Download
Filename: fasmw17330m.zip
Filesize: 1.07 MB
Downloaded: 190 Time(s)


_________________
I don`t like to refer by "you" to one person.
My soul requires acronim "thou" instead.
Post 21 Feb 2023, 18:26
View user's profile Send private message Send e-mail Reply with quote
luboput



Joined: 09 Mar 2023
Posts: 8
luboput 27 Mar 2023, 16:58
а подробнее описать возможности для тех,кто не силён в теме ?
Post 27 Mar 2023, 16:58
View user's profile Send private message Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1718
Roman 27 Mar 2023, 17:06
ProMiNick upload video tutorials on youtube.
About new features and how using them.

Not clear understood what is set of macros realizing that tracking.
Post 27 Mar 2023, 17:06
View user's profile Send private message Reply with quote
ProMiNick



Joined: 24 Mar 2012
Posts: 795
Location: Russian Federation, Sochi
ProMiNick 27 Mar 2023, 20:18
macros not track stack. It is work out of the box. All operations that affect stacktop where stack is predictable changed are tracked by compiler core. predictable is mean change on constant amount coded in imm operand of operation or in size of operands. Changings where value of stack copied from register or memory, or where its value xored, ored, anded, negated, not`ed, or where stack modification happend on esp,sp,rsp variation alien for current bitness mode - are unpredictable. internaly for tracing stack used variable %s (by analogy to variable %t for accesing current time at compilation stage). so for read variable used %s, for write variable used stackorg newvalue. so we need in macros for stacktracing only in code that intuitively predicted, for example: 1. before invoke(any call with args) of anything and after it stack value should be same, so storyng stack before, and restore after. 2. jumps are happend with assumtions that stack values at jump address and at target address are same (if not same - programmer too wise and he will find solution for very trickey stuff himself) so same as with invioke - store stack at jump root address or at first jumpcase target addres, and restore it in other jumpcases. So macros not track stack - they only preserves it for code peaces where it should be preserved. And that is all.
Post 27 Mar 2023, 20:18
View user's profile Send private message Send e-mail Reply with quote
ProMiNick



Joined: 24 Mar 2012
Posts: 795
Location: Russian Federation, Sochi
ProMiNick 27 Mar 2023, 20:57
luboput wrote:
а подробнее описать возможности для тех,кто не силён в теме ?

предсказуемые изменения стека накапливаются в переменной stack_distance, ее значение можно использовать(считать) в любом выражении посредством токена %s. Для записи в переменную stack_distance используется конструкция stackorg новое_значение. Все локальные переменные декларируются так, что они содержат в себе константу значения stack_distance в момент их определения и переменную %s соответствующую значению stack_distance в момент их кодирования внутрь инструкции, так же переменные содержат флаги того через какой регистр производится расчет адреса переменной, через esp(rsp) или какой-то другой. Вокруг конструкций вызовов с аргументами, а также вокруг каждого jumpcase, вокруг которого есть такая необходимость, значение stack_distance сохраняется перед входом в такие конструкции и восстанавливается при выходе. Собственно все.
А то что осталось. Окружение линукс гарантирует что на каждую процедуру стек аргументов будет выровнен на границу параграфа, и адресация относительно esp(rsp) и ebp(rsp) в таких условиях возможна, просто между локальными переменными и аргументами подфункций нужно зарезервировать соответствующее место. Окружение же windows не гарантирует, но и не требует выровненного стека аргументов в x86, но есть функции которые требуют, единственный способ достичь and esp, not $F после которого возможна будет только принудительная адресация через регистр отличный от esp(rsp). То же самое и под линукс, да и под 64бит винду, конечно вызывая АПИ там мы обязаны обеспечить выровненный стек аргументов, но если мы совершаем внутренний вызов - мы можем на это правило забить, а значит внутри подобных внутренних вызовов нам опять же придется делать and rsp, not $F после которого возможна будет только принудительная адресация через регистр отличный от esp(rsp).
А еще линуксоиды привыкли заносить аргументы функций через мов а не через пуш... В общем х64 пока буксует в реализации...

_________________
I don`t like to refer by "you" to one person.
My soul requires acronim "thou" instead.
Post 27 Mar 2023, 20:57
View user's profile Send private message Send e-mail Reply with quote
luboput



Joined: 09 Mar 2023
Posts: 8
luboput 28 Mar 2023, 10:23
благодарю
Post 28 Mar 2023, 10:23
View user's profile Send private message Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.

Website powered by rwasa.