Jump to content

Mefistotelis

Members
  • Posts

    95
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by Mefistotelis

  1. Thanks @Rolf Kalbermatter. You're right about the `.lib` files - just looked at one and it's just a collection of stubs. It's not for dynamic symbol loading, instead it calls `CallLVRT`, giving it a static struct as first parameter - this first parameter contains the symbol name to actually call. There's more than a thousand of symbols in that `.lib` and all of them do that.

    For compiling the LV 2.5 ASM - it would require some minor changes, but not the arch conversion - toolchains today still have `-m32` or `-arch i386` or other parameters to switch to 32-bit, and PC OSes, at least for now, offer 32-bit user space.

    (I'm actually curious about compiling 64-bit app with 32-bit sub-module inside.. seen people experimenting with code segment selector to get to 32-bit mode. Requires mmapping any memory to be accessible in 32-bit space. Not sure if it works outside Linux though.)

    Still, it's just ASM - with todays disassembly tools (and some minimal manual work) I can get compilable ASM for any version of LV, the only difference would be lack of comments and lack of names for static symbols.

     

  2. When I was still at university, I've heard an anecdote about NI once releasing complete source code with a specific LabVIEW version, by mistake. I think I later saw a confirmation on one of LV-related forums (not sure if this one). But after a quick search, I can't find it.

     

    Anyone knows more about this? I'm not really interested in working on LV sources, but would be interesting to just compile that with a modern toolchain.

    Looking at the releases I have:

    * cintools-2_5 has a few ASM files, including assembly source for LVRT. But doesn't look like the whole thing - there's 400k of `.asm` and `.h` files in total.

    * cintools-3 has a header (extcode.h) which is a concatenation of all headers from LV - so there's 327k of headers. No sources though.

    * cintools-6_0 only has standard cintools headers, but there are lots of `.lib` files included (static libraries are a collections of .obj files). So no source code, but there seem to be enough `.obj` files for the whole labview - 1.2M in total

    the releases after 6.0 don't seem to have much interesing stuff in them. And considering when I was at university, the rumored release must have been not newer than v8.0.

  3. When I'm trying to figure out checksums, I'm first trying various online tools which compute them. They often support many varieties.

    Checksum byte is very rarely used for checksum. I've seen once an algorithm which used that area, assuming it is zero filled.

    Count is sometimes included, sometimes not - hard to judge.

     

    If a simple check with few sites/tools won't help, i'm going into REing the code. It is simpler than checking all possibilities.

    Also, implementations of CRC used in various products are often incorrect, ie. incorrectly treating sign, byte order, or just having a typo. So sometimes it's not possible to figure out the algorithm without reversing the target code.

     

  4. 21 hours ago, ShaunR said:

    application developers can't rely on many standard features out-of-the-box, from distro-to-distro, therefore fragmenting application developers across multiple distro's

    There are two APIs to graphical systems: X-window and Wayland.

    X-window contains compatibility layer for Wayland, Wayland contains compatibility layer for X-window. And most libraries which help creating GUIs allow to compile the same user code for both.

     

    Microsoft won by donating Windows to schools, and providing courses for teachers. This paid out over years, making Windows a template by which all OSes are judged.

    Now, at least is EU, there is a movement to require open-source OS in all public institutions. This should, over years, remove some of that bias.

     

  5. Depends on a kid. Depends on his interests.

     

    If you're just after programming a PC:

    Scratch is quite popular. There's also similar thing called Blocky.

     

    If the kid won't get into things unless that's a game:

    Baba is you is a great game for kids.

    He probably already has some favorite games, and many games today use LUA. So he could also start modifying a game he knows using LUA scripts.

     

    If he prefers to drive something mechanic, like a robot:

    There are some DJI products for kids, like Robomaster or Tello. Not the cheapest, but high quality. You can program these.

    There are actually many programmable robots and robotic arms for kids, just search the net.

    Arduino is also easily programmable, and there are many sensors, LEDs, displays, motors etc. which you can drive with it.

     

    • Like 1
  6. On 12/25/2020 at 7:30 PM, Neil Pate said:

    Remove support for Linux and Mac and start to prune this cross compatibility from the codebase. I know this is going to get me flamed for eternity from 0.1 % of the users. (You pretty much made this decision for NXG already). Windows 10 is a great OS and has won the war here.

    I actually don't care enough for LV to get triggered by the first sentence. But the last one... 😡

    • Thanks 1
  7. Typically, people tend to use 'repo' from Android to make a project from multiple git repos. It's a lot more flexible than submodules.

    With 'repo', you create a 'manifest' (or multiple manifests) which contain all repositories to be included, with indication on branch and commit to be used.

    It's intuitive, and anyone who worked with Android already knows how to use it.

     

  8. 1 hour ago, X___ said:

    Note that the discussion was not about whether or not LabVIEW is on its way to dominate the landscape, but where it is discussed (both are certainly related).

    Right; sorry, I had attention span only to read a few last posts.

    10 hours ago, Rolf Kalbermatter said:

    I'm not sure if Github actively monitors for LabVIEW projects and based on what criteria (file endings, mention of LabVIEW in description, something else?).

    From a few projects I looked into, only text files like *.lvproj files seem to be detected. Projects with only VIs in them are not marked as LabVIEW, no matter how much are there or what's the file/project name.

  9. The idea of comparing a quarter instead of full timeline is to have kind of derivative of the use of each language - change in the amount of uses, instead of the total uses. Popularity of LV is on decline for several years now. Whether it's 38th or 51st on a chart isn't going to change much.

    There are many reasons why that is happening; lack of long-term strategy is visible. There was no reaction to HW engineering being transformed from diagrams into Hardware Description Languages. There was no reaction to major languages giving jurisdiction over specifications to non-profit standardizing orgs. For govs shifting towards open-source SW in bureaucracy and education. Even the reaction to expansion of Code Versioning Systems was lacking. That would be a long post if I tried to list all such missteps.

    I'm wondering if there is a strategy now. Some recent actions may suggest NI did set up some goals to reach. I wonder if they realize how far they have to go to reverse the trend in the world we have now.

  10. 14 minutes ago, sam said:

    I know you are showing this as proof of concept and it is great work and progress so far.

    Yes. What I didn't mention in the video is - ATM the tool only supports the specific components I put into project. I didn't even looked at other controls yet. And for various flavors of numeric/boolean controls - all we can figure out is whether that's a control or indicator, the specific visual representation of the switch is lost - recovered one always looks the same.

     

    14 minutes ago, sam said:

    It maybe helpful to think of these points below while you are doing your LabVIEW RE.

    Thank you, will consider that. Complex projects are already supported - you just need `find` to list all extracted files, and do the 3 actions for each of them: extract to XML, recover FP, re-create VI.

     

    14 minutes ago, sam said:

    also bug fix:  at 12:57. the numeric values show "1,1" instead of "1".

    Default data type for that numeric control is Double. For this type, my tool sets an increment of 0,1. If it was Integer, the increase would be 1. The original value of that increment is lost with the removal of FP.
     

  11.   

    29 minutes ago, Antoine Chalons said:

    At the end of the video you don't go too much into details about the missing block diagrams

    Oh, going into that is definitely not for 15 minutes video. Recovering it completely and automatically, for every VI - would be a project for several months (considering this is my afternoon project). It's way easier to make partial recovery, requiring the user to finish. And just placing block diagram with the components we've already recovered for FP - is trivial.

    36 minutes ago, Antoine Chalons said:

    I also noticed that the icon of the subvi is missing - that's not very important

    Yeah, noticed that as well.. the whole connectors pane is very easy to handle, I will likely fix that in the nearby future.

    37 minutes ago, Antoine Chalons said:

    after recreating the VIs from the EXE, if you replace the subVI with a newly created one with the same connector pane, are you able to generate the EXE?

    Yes. That is probably the main use of that solution - recover the project without Block Diagrams, then re-create only VIs that need updating, and re-build everything.

     

  12. I sorted all the extracted LV14 files by size, and one stands out.

    Size of Block Diagram in XML form: 15MB

    And the size is not due to some binary blob stored inside - no, the is just a lot of parts in the block diagram heap.

    Amount of XML tags:

    # xmllint --xpath "count(//*)" ex_allChanPropsMod_BDHb.xml
    234903

    File: vi.lib/Platform/express/ex_EditUserDefinedProperties/ex_allChanPropsMod.vi

    And its content isn't even that impressive:

    ex_allChanPropsMod.png.7624205ca948484040513ec44042ab93.png

    There are just a lot of cases hiding in the "Case Structure", and a lot of copies of the same chunk of diagram within each case.

    Also the file seem to have syntax errors? Is it normal that some library files from NI doesn't even compile?

  13. 10 minutes ago, pawhan11 said:

    those special tags like <vilib> are somehow predefined in LV?

    Yes. "&lt;" and "&gt;" are just symbols used to allow storage in XML; these are so-called HTML Entities. So this string really is "<vilib>".

    10 minutes ago, pawhan11 said:

    Can I create my own custom tags that LV will understand? Or something like probing or assemblyresolve in c#?

    No idea. There are more tags which can be used, but I never cared for listing them, or checking whether they're all hard-coded.

    EDIT: Reading @Rolf Kalbermatter answer above, I see he already answered this.

     

     

  14.   

    54 minutes ago, pawhan11 said:

    id You by any chance see how paths to dependencies are stored inside exe/packed libraries?

    Yes. Extract your file, and paths will be in XML.

    "LVPath" is actually a class, which is instantiated for many things. So all paths basically have the same structure.

    I export it to XML as list of strings - this is how it is really stored. Elements in the list are either normal strings, or tags which LV replaces with value from current config. Example:

      <LIvi>
        <!-- LinkObj Refs for VI -->
        <Section Index="0" Format="inline">
          <LVIN Unk1="NI_InternetTK_Common_VIs.lvlib:Close Calling VI's Windows.vi" Unk2="">
            <!--  VI To Lib Object Ref  -->
            <VILB LinkSaveFlag="2">
              <LinkSaveQualName />
              <LinkSavePathRef Ident="PTH0" TpVal="0">
                <String>&lt;vilib&gt;</String>
                <String>addons</String>
                <String>internet</String>
                <String>NI_InternetTK_Common_VIs.lvlib</String>
                </LinkSavePathRef>
              </VILB>
            </LVIN>
          </Section>
        </LIvi>

     

  15. Thank you!

    That added some important info to my list:

    https://github.com/mefistotelis/pylabview/blob/master/LVcode.py#L224

    A little below the arch list, there's getVICodeProcName() function where I added mangled names for the dispatch table items which I got from LV for MacOS.

    Pylabview will now, upon extraction of a VI file, create a MAP file with offsets and names of known symbols within the executable bytecode.

     

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.