Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
FCKGW
May 21, 2006

One carbon monoxide detector per bedroom seems like a lot, you’ll need to check your local codes.

Even in commie California it’s only one per floor.

Adbot
ADBOT LOVES YOU

HiroProtagonist
May 7, 2007
Nope, it's per bedroom/sleeping area. For most people though that's not a whole lot more than 1 per floor.

1 per floor though is the absolute minimum, absent any of the other factors listed.

edit: just wanna point out that the code only applies if you're buying or selling a home, or any circumstance where it requires it to be inspected just in general. homeowners can do whatever they want, but its considered a very highly recommended life safety measure to still install any detectors in those areas if somehow they're not already present for whatever reason

HiroProtagonist fucked around with this message at 16:02 on Jul 31, 2020

alnilam
Nov 10, 2009

HiroProtagonist posted:

Nope, it's per bedroom/sleeping area. For most people though that's not a whole lot more than 1 per floor.

1 per floor though is the absolute minimum, absent any of the other factors listed.

edit: just wanna point out that the code only applies if you're buying or selling a home, or any circumstance where it requires it to be inspected just in general. homeowners can do whatever they want, but its considered a very highly recommended life safety measure to still install any detectors in those areas if somehow they're not already present for whatever reason

I believe you know what you're talking about for sure but codes are local, and I know it's one per floor where I lived until a month ago. (Dunno what it is where I moved to but don't have any gas things.)

Even the little instruction manual that comes with the detectors I've bought (I know cause I replaced one a month ago) says: one smoke detector per bedroom, one at the top of every staircase, and one near the kitchen; one CO detector per floor in a common area, plus one CO at the basement steps. It does say "check your local codes to be sure." But you'd think Kiddie and FirstAlert would be all over it if they could tell you to put a CO in every bedroom so they could sell more CO detectors. This makes me guess that one CO per floor is the more common code standard, but there are obviously more stringent codes like where you live.

Teriyaki Koinku
Nov 25, 2008

Bread! Bread! Bread!

Bread! BREAD! BREAD!
Given the recent Nintendo megaleak, I've been wondering: why is it such a big deal whenever a game's source code is leaked? How is source code different from when people look at the alpha/beta/prototype versions of games? Why would source code hold hidden material you couldn't otherwise find in said pre-release versions?

In addition, why does leaking source code cause problems for developers or lead to exploits such as when Half-Life 2 was still in development or the relatively recent leaks with TF2 and CS:GO? Is source code normally protected or encrypted by the developer to prevent such leaks? How is hacking source code different from when hackers create bots for multiplayer games, for example? How is viewing source code for a game different from, say, a website which you can easily see with a few button clicks?

I'm not a programmer at all, so I guess I'm having trouble wrapping my mind around this stuff as a layperson. :shobon:

Teriyaki Koinku fucked around with this message at 16:54 on Jul 31, 2020

ultrafilter
Aug 23, 2007

It's okay if you have any questions.


Making bots and exploits from the released version of a game is hard work because you have to interact with the game to see what sorts of effects you get from doing various things. If you have the source code, you know exactly how various pieces of the game work, and that makes exploits much easier to develop. In addition, the source code might contain security-related things, and that can be useful for someone looking to hack into the game servers and other databases. The holy grail for hackers is a database that has credit card info, and there can be stuff in the source code that makes that easier to get.

Mr. Nice!
Oct 13, 2005

c-spam cannot afford



Teriyaki Koinku posted:

Given the recent Nintendo megaleak, I've been wondering: why is it such a big deal whenever a game's source code is leaked? How is source code different from when people look at the alpha/beta/prototype versions of games? Why would source code hold hidden material you couldn't otherwise find in said pre-release versions?

In addition, why does leaking source code cause problems for developers or lead to exploits such as when Half-Life 2 was still in development or the relatively recent leaks with TF2 and CS:GO? Is source code normally protected or encrypted by the developer to prevent such leaks? How is hacking source code different from when hackers create bots for multiplayer games, for example? How is viewing source code for a game different from, say, a website which you can easily see with a few button clicks?

I'm not a programmer at all, so I guess I'm having trouble wrapping my mind around this stuff as a layperson. :shobon:

When you know the source code, you know how the software interacts with the hardware. When you know how the source cord interacts with the hardware, you can exploit it.

Clockwork Sputnik
Nov 6, 2004

24 Hour Party Monster
<-------- who made my avatar?

It was maybe 2006 when I got it, at the height of the "static foreground, scrolling background" av craze. I believe the maker was pretty prolific, and perhaps had a thread called "I'll make avatars based on your username" thread, but that part I'm not sure about.

Platystemon
Feb 13, 2012

BREADS
Software is like a complex machine.

You could take it apart and try to see what makes it tick, but wouldn’t it be easier if you had the blueprints and other documents originally used to create it?

jjack229
Feb 14, 2008
Articulate your needs. I'm here to listen.
It's been years since I had a programming class, so I may be way off on this. But I thought the source code was kind of the pre-compiled stuff. So it would be more human readable and have comments in it. The program or cartridge that the end-user has would be much more condensed and not easy for a person to read and figure out how to modify or exploit.

Teriyaki Koinku
Nov 25, 2008

Bread! Bread! Bread!

Bread! BREAD! BREAD!

Platystemon posted:

Software is like a complex machine.

You could take it apart and try to see what makes it tick, but wouldn’t it be easier if you had the blueprints and other documents originally used to create it?

So this blueprint is separate from the compiled product and kept hidden somewhere under lock and key?

But why is the source code/Javascript on a website so easy to view by comparison? Is it not the same thing? Is the code used to display a webpage different from the source code used in a sensitive database?

I find the source code annotation to be really fascinating because it gives some insight as to the programmer attitudes and intentions at different stages of development and how that vision and imagination changed over time, especially imagining the "what could have been" aspect if certain concepts were expanded upon/not abandoned. I find it fascinating in the same way I find concept art fascinating as well.

Teriyaki Koinku fucked around with this message at 17:29 on Jul 31, 2020

alnilam
Nov 10, 2009

Teriyaki Koinku posted:

So this blueprint is separate from the compiled product and kept hidden somewhere under lock and key?

But why is the source code/Javascript on a website so easy to view by comparison? Is it not the same thing? Is the code used to display a webpage different from the source code used in a sensitive database?

I find the source code annotation to be really fascinating because it gives some insight as to the programmer attitudes and intentions at different stages of development and how that vision and imagination changed over time, especially imagining the "what could have been" if certain concepts were expanded upon/not abandoned. I find it fascinating in the same way I find concept art fascinating as well.

Some software is open source - the developers deliberately have all the source code available online so other people can perhaps modify it, do their own thing with it, improve the program as a volunteer, etc. A big example of this is Linux and nearly all of the software written for Linux. (In fact, Linux stands for "Linux Is Not Unix" and was written to be a free and open-source replacement for Unix with almost identical usage. Unix is/was a Bell Labs system that was all closed source; the Linux team basically re-developed all the basic commands like "ls" and "cat" and "cd" from scratch. They even made sure not to let anyone develop Linux who had ever viewed the Unix source code, otherwise Bell could sue them for stealing secrets and spoil their open source license.)

Most commercial software you have to pay for is not. The source code, which is a whole bunch of text files with fancy programmin' language in them, is kept secret. The source code is compiled into executables that people can run on their computer, and it's those executables that are sent out. During compilation, the compiler figures out how to turn the source code (which is stuff like "if x>5, print 'hello', else, print 'gently caress u'") into a big ol series of commands to send to the CPU and the RAM. At the deepest level it's pretty wild like it's literally sending a series of 0s and 1s in the right order into the CPU that stack up in a certain way within the CPU's architecture to create part of the if-then statement that the programmer wanted - this is where computers get all :psyduck: complicated and definitely beyond what I know but someone who majored in computer science / computer engineering could probably describe it better. Anyway the executable (sometimes also called the "binary") is so complicated that there is no way to back out the source code from the executable.

e: to answer your question though, this is more me talking out of my rear end but I'd guess that web code being easily viewable comes from two things.

One is the history of the web - this is a bit of a simplification but think of your browser as being a compiler that turns the site's source code into something you can view with cool pics and marquee scrolling text and under construction gifs and stuff. In the early history especially, there's no way networks could support sending a pre-compiled viewable page all the drat time, it's much faster to just send over the HTML text and let the user's browser interpret it into a displayed webpage (and then the images are the limiting factor, which is why you would see the text and layout before the images would finish loading). When speeds got faster you could start having like, for example, a webpage made entirely in Flash, which is kind of pre-compiled and (if you recall the days of Flash-designed websites) accordingly takes a while to load the website.

The other thing is that there aren't really any secrets in basic web design, ultimately the code it takes to display images and text and embedded objects in the layout you want has been known for a long time and there's not much to hide. There are secrets on the back-end, like when you use amazon dot com there are a bunch of proprietary things running behind the scenes that interact with the forward-facing code but that you can't see, but ultimately the code to display the buttons and images in the order you see them is no secret.

alnilam fucked around with this message at 17:46 on Jul 31, 2020

ultrafilter
Aug 23, 2007

It's okay if you have any questions.


There are two general approaches to executing code. The first, which shows up in languages like JavaScript and Python, is to have another piece of software that reads a source file, translates it into something executable, and then executes it. The second, which you see in games and other complex or performance-sensitive software, is to do the translation once and generate a file that contains instructions for the hardware. In that second case, the only thing a hacker can see is the output file, and going from that to a human-readable description of what the program does is hard in the best case.

Teriyaki Koinku
Nov 25, 2008

Bread! Bread! Bread!

Bread! BREAD! BREAD!

alnilam posted:

Some software is open source - the developers deliberately have all the source code available online so other people can perhaps modify it, do their own thing with it, improve the program as a volunteer, etc. A big example of this is Linux and nearly all of the software written for Linux. (In fact, Linux stands for "Linux Is Not Unix" and was written to be a free and open-source replacement for Unix with almost identical usage. Unix is/was a Bell Labs system that was all closed source; the Linux team basically re-developed all the basic commands like "ls" and "cat" and "cd" from scratch. They even made sure not to let anyone develop Linux who had ever viewed the Unix source code, otherwise Bell could sue them for stealing secrets and spoil their open source license.)

So, basically if you reinvent the wheel from scratch, you can't be held liable from infringing on a programming patent by the people who invented the original wheel?

That's, uh... Interesting.

Just for reference, I only have like a high school semester or two of Python knowledge from over a decade ago under my belt, so all I remember is print and if;then statements lol

E: yeah, you did bring up an interesting point wrt early internet loading text first then pictures. I grew up on early Internet with webrings and signing guest books, but too young to have been involved with usenet forums prior. I wonder how having a living memory of seeing the early Internet evolve and grow compares with the perspective of today's youth who are likewise now coming of age only ever knowing Reddit/modern YouTube/TikTok/etc?

Teriyaki Koinku fucked around with this message at 18:02 on Jul 31, 2020

ulmont
Sep 15, 2010

IF I EVER MISS VOTING IN AN ELECTION (EVEN AMERICAN IDOL) ,OR HAVE UNPAID PARKING TICKETS, PLEASE TAKE AWAY MY FRANCHISE

Teriyaki Koinku posted:

So, basically if you reinvent the wheel from scratch, you can't be held liable from infringing on a programming patent by the people who invented the original wheel?

It’s not *copyright* infringement if you don’t copy something. In theory I could write a program that had the exact same code as another program, without ever having seen that other program, and there would be no copyright infringement.

However, you can totally Infringe a *patent* (usually a method of doing something) even without ever having seen the original; any parents covering the other program might well be a problem for me in that scenario.

Platystemon
Feb 13, 2012

BREADS

Teriyaki Koinku posted:

So, basically if you reinvent the wheel from scratch, you can't be held liable from infringing on a programming patent by the people who invented the original wheel?

That's, uh... Interesting.

It’s called “clean room technique”.

Think of it like the Coca-Cola recipe. It’s illegal to snatch it in a heist, but there’s nothing illegal about making a very similar drink from your own recipe.

Trapick
Apr 17, 2006

Also with the whole source code thing - there are tools that will take compiled/machine code and give you back source code, which can be neat, but a lot of stuff is lost; raw source code has stuff like comments, well-named variables, structure that tells you a lot about design choices, and maybe entire files and stuff that didn't end up being used. When you compile a project (especially what might be a large game, and one that was released on a cartridge of limited size) the compiler does a ton of optimization and stripping out of unnecessary stuff. Could even be entire things that don't get included in the final game copy (think like..a new level) because they weren't finished. So could be really useful for people looking to understand the code/game.

Companies are reluctant to release source for a bunch of reasons - hackers may gain valuable information, pirates may use it to crack games, it might lessen the market for ports of the original game (if it can be emulated well, maybe no one will buy it on the Switch 2 or whatever), and it might open them up to liability - if an employee put in some code they didn't actually have the rights to use, Nintendo is on the hook for that for copyright infringement. So I see it from their side a bit, but it's so good for history and students to have this kind of stuff out there. I wish copyright law kept up with the times, death+70 years is absolutely ridiculous for stuff like software.

Mak0rz
Aug 2, 2008

😎🐗🚬

Platystemon posted:

It’s called “clean room technique”.

Think of it like the Coca-Cola recipe. It’s illegal to snatch it in a heist, but there’s nothing illegal about making a very similar drink from your own recipe.

On that note:

https://en.wikipedia.org/wiki/Open-source_cola

FCKGW
May 21, 2006

Trapick posted:

Also with the whole source code thing - there are tools that will take compiled/machine code and give you back source code, which can be neat, but a lot of stuff is lost; raw source code has stuff like comments, well-named variables, structure that tells you a lot about design choices, and maybe entire files and stuff that didn't end up being used. When you compile a project (especially what might be a large game, and one that was released on a cartridge of limited size) the compiler does a ton of optimization and stripping out of unnecessary stuff. Could even be entire things that don't get included in the final game copy (think like..a new level) because they weren't finished. So could be really useful for people looking to understand the code/game.

Companies are reluctant to release source for a bunch of reasons - hackers may gain valuable information, pirates may use it to crack games, it might lessen the market for ports of the original game (if it can be emulated well, maybe no one will buy it on the Switch 2 or whatever), and it might open them up to liability - if an employee put in some code they didn't actually have the rights to use, Nintendo is on the hook for that for copyright infringement. So I see it from their side a bit, but it's so good for history and students to have this kind of stuff out there. I wish copyright law kept up with the times, death+70 years is absolutely ridiculous for stuff like software.

There's a lot of re-use in code as well. Gaining the source code to one piece of software can tell you a lot about another piece of software from the same company and can even lead to other software being cracked or exploited or whatever.

credburn
Jun 22, 2016
A tangled skein of bad opinions, the hottest takes, and the the world's most misinformed nonsense. Do not engage with me, it's useless, and better yet, put me on ignore.
What does source code look like?

Methanar
Sep 26, 2013

by the sex ghost

credburn posted:

What does source code look like?

Source code is human readable in some programming language. This example is golang.
https://github.com/kedacore/keda/blob/master/pkg/scalers/kafka_scaler.go

This in python
https://github.com/DataDog/integrations-core/blob/master/kafka_consumer/datadog_checks/kafka_consumer/kafka_consumer.py

This is what compiled binaries look like.
code:
ubuntu@Methanar:/mnt/c/Users/Methanar$ hexdump /bin/ls | head -n 10
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0002 003e 0001 0000 4890 0040 0000 0000
0000020 0040 0000 0000 0000 a700 0001 0000 0000
0000030 0000 0000 0040 0038 0009 0040 001c 001b
0000040 0006 0000 0005 0000 0040 0000 0000 0000
0000050 0040 0040 0000 0000 0040 0040 0000 0000
0000060 01f8 0000 0000 0000 01f8 0000 0000 0000
0000070 0008 0000 0000 0000 0003 0000 0004 0000
0000080 0238 0000 0000 0000 0238 0040 0000 0000
0000090 0238 0040 0000 0000 001c 0000 0000 0000
Compiled binaries are literal 1s and 0s.

Python and javascript do not have a separate compile step prior to execution, but are interpreted. I cannot directly execute the golang example above without first compiling, but I could directly execute the python through the python interpreter. Good luck trying to figure out what the ls binary does from just its compiled form.

The trade off is compiled languages are faster and can have better guarantees about proper function

Methanar fucked around with this message at 20:16 on Jul 31, 2020

alnilam
Nov 10, 2009

credburn posted:

What does source code look like?

Depends on the programming language.

For example here is a random file I clicked on in the LibreOffice (open source analog of MS word / excel / powerpoint)
https://cgit.freedesktop.org/libreoffice/core/diff/sw/source/core/text/inftxt.cxx?id=fb8371400e4b2d32b3981b42c910e04f35ab166b

Of course the source code that makes a LibreOffice Write executable that runs is actually several, maybe hundreds, of different files like that that refer to each other.

Impotence
Nov 8, 2010
Lipstick Apathy

Methanar posted:

Python and javascript do not have a separate compile step prior to execution, but are interpreted. I cannot directly execute the golang example above without first compiling, but I could directly execute the python through the python interpreter. Good luck trying to figure out what the ls binary does from just its compiled form.

The trade off is compiled languages are faster and can have better guarantees about proper function

This is also somewhat 50/50 on interpreted languages, because many of them do compile in some way, usually transparent to the user, or irrelevant/optional until at high performance requirements (pyc files, Cython can compile Python, PHP can AOT/JIT, JS kinda has this support and will build a bunch of things into native code).

Static compilers exist for several interpreted languages, but they mostly appeared out of either experimental use or necessity/speed/correctness-type things.

Also, wtf you name your machine methanar

Methanar
Sep 26, 2013

by the sex ghost

Biowarfare posted:

This is also somewhat 50/50 on interpreted languages, because many of them do compile in some way, usually transparent to the user, or irrelevant/optional until at high performance requirements (pyc files, Cython can compile Python, PHP can AOT/JIT, JS kinda has this support and will build a bunch of things into native code).

Static compilers exist for several interpreted languages, but they mostly appeared out of either experimental use or necessity/speed/correctness-type things.

Also, wtf you name your machine methanar

All of this is true. For somebody asking 'what is source code' its a lot of extra detail though. There is also JVM bytecode stuff but ehh

Ham Equity
Apr 16, 2013

The first thing we do, let's kill all the cars.
Grimey Drawer
The line between programming and scripting is usually drawn at compiling, though with interpreted languages (like Python), it is a bit fuzzy. Powershell, Bash, Batch, and SQL are all scripting; C++ is programming. Scripted languages are generally human-readable (though they can be put in wrappers that aren't).

Ramrod Hotshot
May 30, 2003

I'm traveling out west and working remotely right now. It's a good time, for many reasons, to be the gently caress out of Florida, where I'm from.

Trying to lock down my plans for October. It's between Northern Arizona/Sedona area and Eureka/Arcata in Humboldt county, California. I like the environments in both places, but I'm thinking October might be perfect weather in Northern Arizona, and some leaves changing while the north coast of CA could be getting overcast a lot and foggy. Is this assessment pretty true?

credburn
Jun 22, 2016
A tangled skein of bad opinions, the hottest takes, and the the world's most misinformed nonsense. Do not engage with me, it's useless, and better yet, put me on ignore.
Why can't you extract the source code? Why does it need to be "released"?

Obviously I'm rather ignorant about how all this works, but from my simplified perspective, it seems to me that if a computer can run all this code and follow all the directions to perform the task the code is written for, then it could reverse-engineer it. Like, to use maybe not a good example but one that is the closest to my personal experience: I used to make Flash cartoons way back in the waybackwhen. Exported Flash animations were read-only and you couldn't just open it back up in Flash (well, you could, but you would only get a kind of frame-by-frame stripped down version) without using a third party program that could reverse an extracted Flash file back to its normal working file state. I mean, it did it kind of shoddily, but this was fifteen years ago. Why can't this be done with general everyday source code?

Trapick
Apr 17, 2006

credburn posted:

Why can't you extract the source code? Why does it need to be "released"?

Obviously I'm rather ignorant about how all this works, but from my simplified perspective, it seems to me that if a computer can run all this code and follow all the directions to perform the task the code is written for, then it could reverse-engineer it. Like, to use maybe not a good example but one that is the closest to my personal experience: I used to make Flash cartoons way back in the waybackwhen. Exported Flash animations were read-only and you couldn't just open it back up in Flash (well, you could, but you would only get a kind of frame-by-frame stripped down version) without using a third party program that could reverse an extracted Flash file back to its normal working file state. I mean, it did it kind of shoddily, but this was fifteen years ago. Why can't this be done with general everyday source code?
So, yes, there are tools to decompile source code from binaries. But that doesn't get you the source code as it was written, that gets you some source code that compiles to the same thing - which is fine for the computer to run, but not for people to read.

Source code has comments, properly named variables/functions/etc., logical ordering, an overarching design, maybe even README documents, any number of things. In the compiling process all that stuff gets stripped out. Maybe even entire files/folders/whatever, since you can tell a compiler "oh, we never got to giant Mario, don't include that whole section". So yes, you can get some source code back from the binary, but it's not necessarily all that useful.

There's a joke with a lot of truth to it - often in programming you come across code written six months ago that is utterly incomprehensible - absolutely unclear what it does, how it works, etc. Half the time you look up who wrote this atrocious code and it turns out to be you. Code is hard to read *most of the time*, unless someone has put a lot of work into making that not the case. Decompiled/generated code is usually terrible.

Trapick fucked around with this message at 06:15 on Aug 1, 2020

greazeball
Feb 4, 2003



Ramrod Hotshot posted:

I'm traveling out west and working remotely right now. It's a good time, for many reasons, to be the gently caress out of Florida, where I'm from.

Trying to lock down my plans for October. It's between Northern Arizona/Sedona area and Eureka/Arcata in Humboldt county, California. I like the environments in both places, but I'm thinking October might be perfect weather in Northern Arizona, and some leaves changing while the north coast of CA could be getting overcast a lot and foggy. Is this assessment pretty true?

The landscapes around Sedona are amazing but iirc the forests are coniferous so no changing leaves. Also, you may not be aware but Sedona is a hotspot for vortex and crystal people so there might be extra hippie woo woo vibes out there about the need to wear masks and social distance.

Methanar
Sep 26, 2013

by the sex ghost

credburn posted:

Why can't you extract the source code? Why does it need to be "released"?

Obviously I'm rather ignorant about how all this works, but from my simplified perspective, it seems to me that if a computer can run all this code and follow all the directions to perform the task the code is written for, then it could reverse-engineer it. Like, to use maybe not a good example but one that is the closest to my personal experience: I used to make Flash cartoons way back in the waybackwhen. Exported Flash animations were read-only and you couldn't just open it back up in Flash (well, you could, but you would only get a kind of frame-by-frame stripped down version) without using a third party program that could reverse an extracted Flash file back to its normal working file state. I mean, it did it kind of shoddily, but this was fifteen years ago. Why can't this be done with general everyday source code?

Information is lost during the (many) compile steps. You're trying to turn a hamburger into a cow.

compilation is an inherently lossy process. Information such as variable names and types are lost unless explicit steps are taken to preserve then in the compilation process, for example by requesting debug symbols. Once compiled, variables are basically just unnamed, unsized locations in the memory or register space.

A decompiler cannot know that a function was named quickSort because the final binary doesn't need to know that kind of human detail. You'll just get something out named like function_1. Now do this for every variable too and you've got an unreadable mess.

Worse yet, these two bits of code have the same logic. Which do you decompile to?

code:
int main()
{
    int x;
    for ( x = 0; x < 10; x++ ) {
        printf( "%d\n", x );
    }
    getchar();
}
code:
int main()
{ 
  int x = 0; 
   
  while ( x < 10 ) { 
      printf( "%d\n", x );
      x++;             
  }
  getchar();
}
There are infinite ways of doing literally anything. Now apply this idea to a 250 000 line software project.

erosion
Dec 21, 2002

It's true and I'm tired of pretending it isn't
This couple comes into my store every few months and very slowly records all of our shelf prices on their phones over several hours. Tonight the man did something new and added green dot cards to our display which definitely raised red flags with management. The cards were pulled immediately and they were asked to leave. What are they up to? I don't know if the cards were confiscated but that sounds like a scratch off scam. Just not sure on the prices thing.

Man with Hat
Dec 26, 2007

Open up your Dethday present
It's a box of fucking nothing

Exciting Lemon

Methanar posted:

Information is lost during the (many) compile steps. You're trying to turn a hamburger into a cow.

compilation is an inherently lossy process. Information such as variable names and types are lost unless explicit steps are taken to preserve then in the compilation process, for example by requesting debug symbols. Once compiled, variables are basically just unnamed, unsized locations in the memory or register space.

A decompiler cannot know that a function was named quickSort because the final binary doesn't need to know that kind of human detail. You'll just get something out named like function_1. Now do this for every variable too and you've got an unreadable mess.

Worse yet, these two bits of code have the same logic. Which do you decompile to?

code:
int main()
{
    int x;
    for ( x = 0; x < 10; x++ ) {
        printf( "%d\n", x );
    }
    getchar();
}
code:
int main()
{ 
  int x = 0; 
   
  while ( x < 10 ) { 
      printf( "%d\n", x );
      x++;             
  }
  getchar();
}
There are infinite ways of doing literally anything. Now apply this idea to a 250 000 line software project.

Another way to picture this is think of a finished sudoku and try to reverse engineer it to the original. You really can't since there are a million different initial states that would result in the same finished sudoku but only one way to finish the original.

This is not at all how compilation works but it's a good way of visualizing the difficulties in reverse engineering compiled code for someone who doesn't know that much about code.

credburn
Jun 22, 2016
A tangled skein of bad opinions, the hottest takes, and the the world's most misinformed nonsense. Do not engage with me, it's useless, and better yet, put me on ignore.
God, thank you for that. Having no coding experience beyond what I learned with BASIC so I could do classroom shenanigans, it all sounds so fascinating but kind of incomprehensible. The idea that compilation is a lossy process is one of those things that feels like an epiphany, like this concept that had before now never entered my mind.

:psyboom:

Badger of Basra
Jul 26, 2007

A thing I’ve read and heard often is that sometime in the 19th century they “raised the street level” in Chicago because of flooding. The Chicago they did this in was not the same geographically as the one that exists today. But for some reason, the streets are basically flat throughout the city rather than sloping down as you go out from the part that was raised (or if they do, I can’t tell).

Why is that?

Mak0rz
Aug 2, 2008

😎🐗🚬

Extensive Vamping posted:

This couple comes into my store every few months and very slowly records all of our shelf prices on their phones over several hours. Tonight the man did something new and added green dot cards to our display which definitely raised red flags with management. The cards were pulled immediately and they were asked to leave. What are they up to? I don't know if the cards were confiscated but that sounds like a scratch off scam. Just not sure on the prices thing.

My first thought was that they're running a competing store and are scoping out what yours charges for things.

How would a scratch off scam work in this way?

ultrafilter
Aug 23, 2007

It's okay if you have any questions.


Methanar posted:

code:
int main()
{
    int x;
    for ( x = 0; x < 10; x++ ) {
        printf( "%d\n", x );
    }
    getchar();
}
code:
int main()
{ 
  int x = 0; 
   
  while ( x < 10 ) { 
      printf( "%d\n", x );
      x++;             
  }
  getchar();
}

This is probably the best simple example you're going to get, but it's vastly understating just how much information is lost during the compilation process. The process of turning either of these programs into machine code consists of more or less a line-by-line translation. The techniques that people use to organize large programs involve bits of code where that doesn't work at all, and there's effectively an intermediate step of generating code like this. In those cases, the reverse engineering process can only recover that intermediate code, and can never tell you anything about what the actual human-readable source code looks like.

erosion
Dec 21, 2002

It's true and I'm tired of pretending it isn't

Mak0rz posted:

My first thought was that they're running a competing store and are scoping out what yours charges for things.

How would a scratch off scam work in this way?

I think "scratch off scam" is the wrong term, I'm thinking of when the PIN is revealed and recorded along with the card number and then the covering material is replaced with a new scratch off sticker. I guess they could also be swapping used up cards with new ones because that happens. That depends on which actual item was being tampered. I'm still trying to figure out how this works.

erosion fucked around with this message at 16:05 on Aug 1, 2020

Fruits of the sea
Dec 1, 2010

Is there a numismatics thread? I've come into a whole load of paper money from roughly the last 100-odd years from all over the world, including some countries that don't exist anymore. It's kinda neat, and I'd like to learn some more about what's there. Also maybe some of it is worth throwing on ebay.

Moo the cow
Apr 30, 2020

Fruits of the sea posted:

Is there a numismatics thread? I've come into a whole load of paper money from roughly the last 100-odd years from all over the world, including some countries that don't exist anymore. It's kinda neat, and I'd like to learn some more about what's there. Also maybe some of it is worth throwing on ebay.

Bizarrely, it is in DIY:

https://forums.somethingawful.com/showthread.php?threadid=3706376

Qubee
May 31, 2013




How did humans deal with appendicitis in the past? Back when medicine wasn't a thing and we were hunter gatherers (or even the medieval period).

Adbot
ADBOT LOVES YOU

ultrafilter
Aug 23, 2007

It's okay if you have any questions.


Qubee posted:

How did humans deal with appendicitis in the past? Back when medicine wasn't a thing and we were hunter gatherers (or even the medieval period).

People died.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply