Jump to content


Photo
- - - - -

What exactly is SuperSecretPrivateSpecialStuff for?


  • Please log in to reply
24 replies to this topic

#1 flarn2006

flarn2006

    Very Active

  • Members
  • PipPipPip
  • 150 posts
  • Location:Northern Virginia
  • Version:LabVIEW 2012
  • Since:2005

Posted 29 June 2012 - 04:54 AM

The only posts I can find about this LabVIEW.ini key are from more than five years ago. Open LabVIEW.ini, and add "SuperSecretPrivateSpecialStuff=true" and then place a VI property node. Tons more properties appear, and if you select the new ones, it becomes this dark tan color, similar to scripting with the cyan color.

Posted Image

Interesting...too bad it's read-only.

So what exactly would make something qualify to only be enabled by this and not the scripting toggle? And Aristos, does IsGeneric indeed mean what I think it does?

SuperSecretPrivateSpecialStuff=True.


#2 rolfk

rolfk

    LabVIEW Aficionado

  • Premium Member
  • 2,045 posts
  • Location:Netherlands
  • Version:LabVIEW 2011
  • Since:1992

Posted 29 June 2012 - 09:11 AM

*
POPULAR

The only posts I can find about this LabVIEW.ini key are from more than five years ago. Open LabVIEW.ini, and add "SuperSecretPrivateSpecialStuff=true" and then place a VI property node. Tons more properties appear, and if you select the new ones, it becomes this dark tan color, similar to scripting with the cyan color.

Posted Image

Interesting...too bad it's read-only.

So what exactly would make something qualify to only be enabled by this and not the scripting toggle? And Aristos, does IsGeneric indeed mean what I think it does?


In general unlike the scripting stuff, this are more general methods and properties added for various reasons during the development for LabVIEW, usually to allow a certain LabVIEW tool to do something. Those methods while there, do not receive the same attentions in terms of maintenance, unit test coverage and of course documentation. They can and sometimes do break under different than the intended use cases, are left outside in the cold, when NI creates a new LabVIEW version and simply are the unloved stepchild in terms of care and maintenance in general. Whoever added them for their specific tool is responsible to make sure they keep working in newer releases but it's very likely that a developer adding a new feature to LabVIEW isn't aware about some of them in the first place and in the course breaks them horribly and because of the limited unit test coverage such a breakage may not get discovered.

So in conclusion, play with them, have fun and enjoy the feeling to have a privileged position in terms of inside view into LabVIEW things, but DON'T use them for anything you want to be able to work across new LabVIEW versions without breaking your code, especially if you plan to develop something that might end up being used by other people than yourself.

#3 Yair

Yair

    Extwemely Active

  • Members
  • PipPipPipPipPipPip
  • 2,644 posts
  • Version:LabVIEW 2009
  • Since:2003

Posted 29 June 2012 - 09:25 AM

To add to what Rolf said, the tan properties and methods are known as "private". If you hover over them with the CH window open, you should see them marked as Is Private. And looking at what Rolf said, you can see why they have that name.

And Aristos, does IsGeneric indeed mean what I think it does?


It does, but you're already aware of the problems with it. Also, it's been quite a while since I played with this, but I seem to recall there is some trick to it (e.g. it has to be the control inside the array or it has to be to set on the VI as well).

#4 flarn2006

flarn2006

    Very Active

  • Members
  • PipPipPip
  • 150 posts
  • Location:Northern Virginia
  • Version:LabVIEW 2012
  • Since:2005

Posted 29 June 2012 - 09:28 AM

Oh, okay, that makes sense. Thanks for explaining. They still could have used a nicer color for the property/invoke nodes, though. Like #80FF80 (this color).
And what is there some trick to?

Edited by flarn2006, 29 June 2012 - 09:40 AM.

SuperSecretPrivateSpecialStuff=True.


#5 rolfk

rolfk

    LabVIEW Aficionado

  • Premium Member
  • 2,045 posts
  • Location:Netherlands
  • Version:LabVIEW 2011
  • Since:1992

Posted 29 June 2012 - 09:32 AM

Oh, okay, that makes sense. Thanks for explaining. They still could have used a nicer color for the property/invoke nodes, though. Like #80FF80 (this color).


Why? This color much more clearly states the situation about those nodes, than your suggestion :D. It screams at the user: go away, don't look at me, don't even think about it!!!!!
Besides the color you suggest is used in some of my company internal libraries already so I have a first use right on that! :lol:

#6 Darren

Darren

    Extremely Active

  • NI
  • 398 posts
  • Location:Austin, TX
  • Version:LabVIEW 2012
  • Since:1999

Posted 29 June 2012 - 03:43 PM

*
POPULAR

Over the past few years, I have advocated that several private properties/methods that could be useful to the wider LabVIEW audience be made public/scripting. I have been largely successful. Please let me know (on this thread, or with PMs, or whatever) if y'all come across private entries that you think would be useful, and I'll see what I can do to make them official in a future LabVIEW version.

#7 flarn2006

flarn2006

    Very Active

  • Members
  • PipPipPip
  • 150 posts
  • Location:Northern Virginia
  • Version:LabVIEW 2012
  • Since:2005

Posted 30 June 2012 - 01:49 AM

Over the past few years, I have advocated that several private properties/methods that could be useful to the wider LabVIEW audience be made public/scripting. I have been largely successful. Please let me know (on this thread, or with PMs, or whatever) if y'all come across private entries that you think would be useful, and I'll see what I can do to make them official in a future LabVIEW version.

Well, I just took a quick look and noticed a couple, like App.Get Shell Icon of File and App.License.Get Licensed Version.
Also, are there any other "security levels" of properties and methods? Right now I have access to public, scripting, and private, but are there any others? I ask because for the XNodeLib type (returned by App.XNode.Create) there are no properties or methods.

Edited by flarn2006, 30 June 2012 - 01:55 AM.

SuperSecretPrivateSpecialStuff=True.


#8 lordexod

lordexod

    Very Active

  • Members
  • PipPipPip
  • 61 posts
  • Location:Poland
  • Version:LabVIEW 2012
  • Since:2007

Posted 30 June 2012 - 11:24 AM

VI.Compile.Compile To DFIR CPP - This method is very intresting.

Edited by lordexod, 30 June 2012 - 11:30 AM.

LabVIEW Reverse Engineer

#9 rolfk

rolfk

    LabVIEW Aficionado

  • Premium Member
  • 2,045 posts
  • Location:Netherlands
  • Version:LabVIEW 2011
  • Since:1992

Posted 30 June 2012 - 11:44 AM

VI.Compile.Compile To DFIR CPP - This method is very intresting.


I'm pretty sure it is what the Microprocessor C Development Toolkit uses and as such this function will not do much useful if you don't have a valid license for that toolkit. Remember that LabVIEW has a license management system (at least under Windows) and that much of this functionality is protected through that. As such if you have the license for the Toolkit you have the functionality much more conveniently available in the Tools menu, and if you don't have the license, this method won't do anything but give an error.

#10 lordexod

lordexod

    Very Active

  • Members
  • PipPipPip
  • 61 posts
  • Location:Poland
  • Version:LabVIEW 2012
  • Since:2007

Posted 30 June 2012 - 12:04 PM

VI.Generate C Code Variant - That method used in LabVIEW Microprocessor SDK and generates ANSI C code.
VI.Compile.Compile To DFIR CPP - This method is generates C++ code.

Example code:
const char testviRef_data[] =
                    "\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\042\000@@\005\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\005Array\001\000\001\000\000"
                    "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\012\000\000\000\000\000\000\012\002\000\000\000"
                    "\025\000\012@\000\016number: 0 to 1\000\034\000@\000\005\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016n"
                    "umber: 0 to 1\000\030\000@\000\004\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000"
                    "\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\030\000@\000\004\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012"
                    "@\000\016number: 0 to 1\000\024\000@\000\003\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000"
                    "\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\024\000@\000\003\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016n"
                    "umber: 0 to 1\000\020\000@\000\002\000\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000\000\000"
                    "\025\000\012@\000\016number: 0 to 1\000\020\000@\000\002\000\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016number: 0 to "
                    "1\000\014\000@\000\001\000\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 "
                    "to 1\000\014\000@\000\001\000\377\377\377\377\000\000\001\000\001\000\001\000\000\000\025\000\012@\000\016number: 0 to 1\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001"
                    "\000\000\000\004\000!\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\025\000\012@\000\016number: 0 to 1\000\001\000\000\000\001\000\000\000\025\000\012@\000\016n"
                    "umber: 0 to 1\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\004\000!\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000"
                    "\000\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\014\000@\000\001\000\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016number: "
                    "0 to 1\000\014\000@\000\001\000\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\004\000!\000\001\000\000\000\001\000\000"
                    "\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\020\000@\000\002\000\377\377\377\377\377\377\377\377\000\000"
                    "\001\000\001\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\020\000@\000\002\000\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000"
                    "\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\004\000!\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000"
                    "\000\000\025\000\012@\000\016number: 0 to 1\000\024\000@\000\003\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016number:"
                    " 0 to 1\000\024\000@\000\003\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000"
                    "\003\000\000\001\000\000\000\001\000\000\000\004\000!\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0"
                    " to 1\000\030\000@\000\004\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\030\000@\000\004"
                    "\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000"
                    "\000\000\025\000\012@\000\016number: 0 to 1\000\034\000@\000\005\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000"
                    "\016number: 0 to 1\000\042\000@@\005\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\005Array\001\000\001\000\001\000\000\000\005\000\003\000\000\001"
                    "\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000";
 
    DFIR::VirtualInstrument& testviRef = DFIR::VirtualInstrument::Create(LinkIdentity(&PathRef("C:\\Users\\xxx\\Desktop\\test.vi", PathRef::kStringDisplay), NULL/*context*/));
    {
        DFIR::Diagram& diagramRef_1 = testviRef.GetDiagrams()[0];
        DFIR::Indicator& indicatorRef_2 = DFIR::Indicator::Create(diagramRef_1, DFIR::TestUtil::MakeValue(testviRef_data, 0, 63, 20), 0, -1, false);indicatorRef_2.SetSourceID(367);
        DFIR::Constant& constantRef_3 = DFIR::Constant::Create(diagramRef_1, DFIR::TestUtil::MakeValue(testviRef_data, 103, 13, 4));constantRef_3.SetSourceID(469);
        DFIR::ForLoop& forLoopRef_4 = DFIR::ForLoop::Create(diagramRef_1, DFIR::LoopCondition::StopIfTrue);forLoopRef_4.SetSourceID(43);
        DFIR::LoopIndex& loopIndexRef_6 = forLoopRef_4.GetLoopIndex();
        DFIR::LoopCondition& loopConditionRef_7 = forLoopRef_4.GetLoopCondition();
        DFIR::LoopMax& loopMaxRef_8 = forLoopRef_4.GetLoopMax();
        DFIR::Tunnel& tunnelRef_9 = forLoopRef_4.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 124, 57), DFIR::TestUtil::MakeTDR(testviRef_data, 181, 53));
        DFIR::Tunnel& tunnelRef_10 = forLoopRef_4.CreateTunnel(DFIR::Terminal::Input, DFIR::Tunnel::NonIndexing, DFIR::TestUtil::MakeTDR(testviRef_data, 234, 13), DFIR::TestUtil::MakeTDR(testviRef_data, 247, 13));
        {
            DFIR::Diagram& diagramRef_5 = forLoopRef_4.GetDiagrams()[0];
            DFIR::ForLoop& forLoopRef_11 = DFIR::ForLoop::Create(diagramRef_5, DFIR::LoopCondition::StopIfTrue);forLoopRef_11.SetSourceID(70);
            DFIR::LoopIndex& loopIndexRef_13 = forLoopRef_11.GetLoopIndex();
            DFIR::LoopCondition& loopConditionRef_14 = forLoopRef_11.GetLoopCondition();
            DFIR::LoopMax& loopMaxRef_15 = forLoopRef_11.GetLoopMax();
            DFIR::Tunnel& tunnelRef_16 = forLoopRef_11.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 260, 53), DFIR::TestUtil::MakeTDR(testviRef_data, 313, 49));
            DFIR::Tunnel& tunnelRef_17 = forLoopRef_11.CreateTunnel(DFIR::Terminal::Input, DFIR::Tunnel::NonIndexing, DFIR::TestUtil::MakeTDR(testviRef_data, 362, 13), DFIR::TestUtil::MakeTDR(testviRef_data, 375, 13));
            {
                DFIR::Diagram& diagramRef_12 = forLoopRef_11.GetDiagrams()[0];
                DFIR::ForLoop& forLoopRef_18 = DFIR::ForLoop::Create(diagramRef_12, DFIR::LoopCondition::StopIfTrue);forLoopRef_18.SetSourceID(95);
                DFIR::LoopIndex& loopIndexRef_20 = forLoopRef_18.GetLoopIndex();
                DFIR::LoopCondition& loopConditionRef_21 = forLoopRef_18.GetLoopCondition();
                DFIR::LoopMax& loopMaxRef_22 = forLoopRef_18.GetLoopMax();
                DFIR::Tunnel& tunnelRef_23 = forLoopRef_18.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 388, 49), DFIR::TestUtil::MakeTDR(testviRef_data, 437, 45));
                DFIR::Tunnel& tunnelRef_24 = forLoopRef_18.CreateTunnel(DFIR::Terminal::Input, DFIR::Tunnel::NonIndexing, DFIR::TestUtil::MakeTDR(testviRef_data, 482, 13), DFIR::TestUtil::MakeTDR(testviRef_data, 495, 13));
                {
                    DFIR::Diagram& diagramRef_19 = forLoopRef_18.GetDiagrams()[0];
                    DFIR::ForLoop& forLoopRef_25 = DFIR::ForLoop::Create(diagramRef_19, DFIR::LoopCondition::StopIfTrue);forLoopRef_25.SetSourceID(120);
                    DFIR::LoopIndex& loopIndexRef_27 = forLoopRef_25.GetLoopIndex();
                    DFIR::LoopCondition& loopConditionRef_28 = forLoopRef_25.GetLoopCondition();
                    DFIR::LoopMax& loopMaxRef_29 = forLoopRef_25.GetLoopMax();
                    DFIR::Tunnel& tunnelRef_30 = forLoopRef_25.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 508, 45), DFIR::TestUtil::MakeTDR(testviRef_data, 553, 41));
                    DFIR::Tunnel& tunnelRef_31 = forLoopRef_25.CreateTunnel(DFIR::Terminal::Input, DFIR::Tunnel::NonIndexing, DFIR::TestUtil::MakeTDR(testviRef_data, 594, 13), DFIR::TestUtil::MakeTDR(testviRef_data, 607, 13));
                    {
                        DFIR::Diagram& diagramRef_26 = forLoopRef_25.GetDiagrams()[0];
                        DFIR::ForLoop& forLoopRef_32 = DFIR::ForLoop::Create(diagramRef_26, DFIR::LoopCondition::StopIfTrue);forLoopRef_32.SetSourceID(145);
                        DFIR::LoopIndex& loopIndexRef_34 = forLoopRef_32.GetLoopIndex();
                        DFIR::LoopCondition& loopConditionRef_35 = forLoopRef_32.GetLoopCondition();
                        DFIR::LoopMax& loopMaxRef_36 = forLoopRef_32.GetLoopMax();
                        DFIR::Tunnel& tunnelRef_37 = forLoopRef_32.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 620, 41), DFIR::TestUtil::MakeTDR(testviRef_data, 661, 29));
                        {
   	                     DFIR::Diagram& diagramRef_33 = forLoopRef_32.GetDiagrams()[0];
   	                     DFIR::RandomNumber0To1Primitive& randomNumber0To1PrimitiveRef_38 = DFIR::RandomNumber0To1Primitive::Create(diagramRef_33);randomNumber0To1PrimitiveRef_38.SetSourceID(170);
   	                     DFIR::Wire& wireRef_49 = DFIR::Wire::Create(diagramRef_33, 2);wireRef_49.SetSourceID(262);
 
   	                     {
   		                     std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;
   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_34, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 690, 13)));
   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_35, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 703, 12)));
   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_36, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 715, 13)));
   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&randomNumber0To1PrimitiveRef_38, 0, &wireRef_49, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 728, 29)));
   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_49, 1, &tunnelRef_37, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 757, 29)));
   		                     DFIR::TestUtil::ConnectNodes(connectivityVec);
   	                     }
                        }
                        DFIR::Wire& wireRef_47 = DFIR::Wire::Create(diagramRef_26, 2);wireRef_47.SetSourceID(246);
                        DFIR::Wire& wireRef_48 = DFIR::Wire::Create(diagramRef_26, 2);wireRef_48.SetSourceID(582);
 
                        {
   	                     std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;
   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_27, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 786, 13)));
   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_28, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 799, 12)));
   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_29, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 811, 13)));
   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&tunnelRef_31, 1, &wireRef_48, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 824, 13)));
   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_32, 1, &wireRef_47, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 837, 41)));
   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_47, 1, &tunnelRef_30, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 878, 41)));
   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_48, 1, &loopMaxRef_36, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 919, 13)));
   	                     DFIR::TestUtil::ConnectNodes(connectivityVec);
                        }
                    }
                    DFIR::Wire& wireRef_45 = DFIR::Wire::Create(diagramRef_19, 2);wireRef_45.SetSourceID(230);
                    DFIR::Wire& wireRef_46 = DFIR::Wire::Create(diagramRef_19, 3);wireRef_46.SetSourceID(558);
 
                    {
                        std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;
                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_20, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 932, 13)));
                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_21, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 945, 12)));
                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_22, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 957, 13)));
                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&tunnelRef_24, 1, &wireRef_46, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 970, 13)));
                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_25, 1, &wireRef_45, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 983, 45)));
                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_45, 1, &tunnelRef_23, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 1028, 45)));
                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_46, 1, &loopMaxRef_29, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1073, 13)));
                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_46, 2, &tunnelRef_31, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1086, 13)));
                        DFIR::TestUtil::ConnectNodes(connectivityVec);
                    }
                }
                DFIR::Wire& wireRef_43 = DFIR::Wire::Create(diagramRef_12, 2);wireRef_43.SetSourceID(214);
                DFIR::Wire& wireRef_44 = DFIR::Wire::Create(diagramRef_12, 3);wireRef_44.SetSourceID(534);
 
                {
                    std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;
                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_13, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1099, 13)));
                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_14, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1112, 12)));
                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_15, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1124, 13)));
                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&tunnelRef_17, 1, &wireRef_44, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1137, 13)));
                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_18, 1, &wireRef_43, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1150, 49)));
                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_43, 1, &tunnelRef_16, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 1199, 49)));
                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_44, 1, &loopMaxRef_22, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1248, 13)));
                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_44, 2, &tunnelRef_24, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1261, 13)));
                    DFIR::TestUtil::ConnectNodes(connectivityVec);
                }
            }
            DFIR::Wire& wireRef_41 = DFIR::Wire::Create(diagramRef_5, 2);wireRef_41.SetSourceID(198);
            DFIR::Wire& wireRef_42 = DFIR::Wire::Create(diagramRef_5, 3);wireRef_42.SetSourceID(510);
 
            {
                std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;
                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_6, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1274, 13)));
                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_7, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1287, 12)));
                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_8, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1299, 13)));
                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&tunnelRef_10, 1, &wireRef_42, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1312, 13)));
                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_11, 1, &wireRef_41, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1325, 53)));
                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_41, 1, &tunnelRef_9, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 1378, 53)));
                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_42, 1, &loopMaxRef_15, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1431, 13)));
                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_42, 2, &tunnelRef_17, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1444, 13)));
                DFIR::TestUtil::ConnectNodes(connectivityVec);
            }
        }
        DFIR::Wire& wireRef_39 = DFIR::Wire::Create(diagramRef_1, 2);wireRef_39.SetSourceID(380);
        DFIR::Wire& wireRef_40 = DFIR::Wire::Create(diagramRef_1, 3);wireRef_40.SetSourceID(475);
 
        {
            std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;
            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&constantRef_3, 0, &wireRef_40, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1457, 13)));
            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_4, 1, &wireRef_39, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1470, 57)));
            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_39, 1, &indicatorRef_2, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1527, 63)));
            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_40, 1, &loopMaxRef_8, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1590, 13)));
            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_40, 2, &tunnelRef_10, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1603, 13)));
            DFIR::TestUtil::ConnectNodes(connectivityVec);
        }
    }

Edited by asbo, 05 July 2012 - 03:34 PM.
: If you're going to spam plaintext instead of attaching it, at least use formatting.

LabVIEW Reverse Engineer

#11 flarn2006

flarn2006

    Very Active

  • Members
  • PipPipPip
  • 150 posts
  • Location:Northern Virginia
  • Version:LabVIEW 2012
  • Since:2005

Posted 30 June 2012 - 10:53 PM

Any function to do the reverse? Maybe you could do some interesting things by editing that code.

SuperSecretPrivateSpecialStuff=True.


#12 rolfk

rolfk

    LabVIEW Aficionado

  • Premium Member
  • 2,045 posts
  • Location:Netherlands
  • Version:LabVIEW 2011
  • Since:1992

Posted 01 July 2012 - 08:57 AM

Any function to do the reverse? Maybe you could do some interesting things by editing that code.


Maybe start reading this. I can't say I understand it on more than a very superficial level.

Personally I think the result of this node is likely a result of exposing some interna in order to help debugging the DFIR and LLVM functionality without always having to dig into the C++ source code debugger itself. Following memory dumps from the C source debugger is immensely frustrating and error prone so creating a possibility to see what the DFIR algorithm created in order to debug optimization problems is so much more easy. Without access to the GenAPI and the LLVM integration into it, the result is however likely not very useful for someone.

By the way is the user name "xxx" in your dump the result of an after the fact edit of the dump to hide your identity or the result of running such exercises in a special user account to avoid possible interferences with the rest of your system by such exercises? :P
For someone in the knows the binary data in the beginning could also contain interesting clues.

#13 lordexod

lordexod

    Very Active

  • Members
  • PipPipPip
  • 61 posts
  • Location:Poland
  • Version:LabVIEW 2012
  • Since:2007

Posted 01 July 2012 - 10:39 AM

http://www.ni.com/white-paper/11472/en - Optimization and generate the graphs in LLVM, it's a whole different story.
VI.Compile.Compile To DFIR CPP - In this case, you give Vi and reads the C++ code.
CodeGenCPP.png

Edited by lordexod, 01 July 2012 - 10:41 AM.

LabVIEW Reverse Engineer

#14 lordexod

lordexod

    Very Active

  • Members
  • PipPipPip
  • 61 posts
  • Location:Poland
  • Version:LabVIEW 2012
  • Since:2007

Posted 01 July 2012 - 11:26 AM

Optimization and generate the graphs in LLVM:
vi2dot.png
Is needed graph file (*.dot) editor: http://www.graphviz.org/

Edited by lordexod, 01 July 2012 - 11:28 AM.

LabVIEW Reverse Engineer

#15 Darren

Darren

    Extremely Active

  • NI
  • 398 posts
  • Location:Austin, TX
  • Version:LabVIEW 2012
  • Since:1999

Posted 02 July 2012 - 03:55 PM

The "wider LabVIEW audience" doesn't include all the l33t h4xx0rz talk on this thread, so don't expect any of the DFIR compilation or Licensing stuff to ever become public. :) Keep in mind we need to run any public/scripting VI Server stuff through rigorous documentation and testing before releasing it to a wider audience. As has been mentioned multiple times by myself and AQ in the past, something is private usually because it's been designed and used for one specific use case, with no other cases really documented or tested.

Now, Get Shell Icon of File, on the other hand, I could see being useful to the general public. I'll put that on my list to advocate for LabVIEW 2013.

#16 Aristos Queue

Aristos Queue

    LV R&D: I write C++/# so you don't have to.

  • Premium Member
  • 2,620 posts
  • Location:Austin, TX
  • Version:LabVIEW 2011
  • Since:2000

Posted 03 July 2012 - 12:47 AM

*
POPULAR

HEY!!! I have a perfect example for everyone of stuff to not go poking around in!

The "Get LV Class Default Value.vi" ... if you pop it open with your favorite password cracker, you'll find a Call Library Node. You pass into that Call Library Node a path and an app instance refnum and out comes the LV class.

And now you're thinking, "HEY! Aristos Queue didn't put that app instance refnum on the conpane of the VI! He's hiding functionality from me! I can use this to get the value of a class in another application instance!" And so you wire up a different application instance. And you run your VI. Now, sometimes you crash right away. Other times, you don't crash until you try to close the project. Other times you just get a crash on exiting of LabVIEW. In any case, you've thrown off the reference count for LV class data because -- ha -- it is an ILLEGAL OPERATION TO PUT CLASS DATA FROM A CLASS INTO THE WRONG APPLICATION INSTANCE. You have to marshall the data from one app instance into the other app instance, because the *class itself* might not exist in the other instance, or might exist with a different definition (i.e., in one app instance you loaded c:\x.lvclass and in the other you loaded d:\x.lvlclass). And, hey, if you want to go indexing off the end of a pointer into undefined memory, this is a great way to do it.

I swear, by all the nodes and wires in Heaven, none of this stuff has any business being on any block diagram except for the one that it is on and that we password protected. It is either useless to you or subject to change in a future version of LV because we're still refining it and have no intention of supporting the current version (unless it passes testing and we decide to make it official, but we might not have time to do that in a given release, so it may take a while, so just because it has been there and private for a few releases doesn't mean it will be there forever).

#17 lordexod

lordexod

    Very Active

  • Members
  • PipPipPip
  • 61 posts
  • Location:Poland
  • Version:LabVIEW 2012
  • Since:2007

Posted 03 July 2012 - 10:53 AM

Get LV Class Default Value.vi

Options = 0x20000000 -> LoadStateFlags = InstantiateTemplate
Options = 0x20 -> LoadStateFlags = NoProg
Options = 0x10 -> LoadStateFlags = None
Options != 0x10 -> LoadStateFlags = NoDialog
Options = 0x1 -> LoadStateFlags = None
Options != 0x1 -> LoadStateFlags = SuppressDocMods
LabVIEW Reverse Engineer

#18 flarn2006

flarn2006

    Very Active

  • Members
  • PipPipPip
  • 150 posts
  • Location:Northern Virginia
  • Version:LabVIEW 2012
  • Since:2005

Posted 06 July 2012 - 05:53 AM

App.Get Active VI Ref? That one could be useful, Darren.

SuperSecretPrivateSpecialStuff=True.


#19 Darren

Darren

    Extremely Active

  • NI
  • 398 posts
  • Location:Austin, TX
  • Version:LabVIEW 2012
  • Since:1999

Posted 06 July 2012 - 08:21 PM

App.Get Active VI Ref? That one could be useful, Darren.

Definitely useful, as it was added for one of my features back in LabVIEW 8.6. :) I've added it to my list.

#20 asbo

asbo

    I have no idea what you're talking about... so:

  • V I Engineering, Inc.
  • 1,273 posts
  • Version:LabVIEW 2011
  • Since:2008

Posted 07 July 2012 - 12:25 AM

Definitely useful, as it was added for one of my features back in LabVIEW 8.6. :) I've added it to my list.

Does Active in this context to the VI with FP focus? If there's any context help for that I don't have the ability to reference it right now.