Liste des Groupes | Revenir à c theory |
On 6/24/2024 2:36 PM, joes wrote:Which just shows that you don't understand the rules and principles of the field you are talking about.Am Mon, 24 Jun 2024 08:48:19 -0500 schrieb olcott:typedef uint32_t u32;On 6/24/2024 2:37 AM, Mikko wrote:AFACT HH1 is the same as HH0, right? What happens when HH1 tries toOn 2024-06-23 13:17:27 +0000, olcott said:I had to make a few more examples such as HH1(DD,DD)On 6/23/2024 3:22 AM, Mikko wrote:>That code is not from the mentined trace file. In that file _DDD()>
is at the addresses 2093..20a4. According to the trace no instruction
at the address is executed (because that address points to the last
byte of a three byte instruction.
In order to make my examples I must edit the code and this changes the
addresses of some functions.
Why do you need to make an example when you already have one in the
file mentioned in the subject line?
>
simulate a function DD1 that only calls HH1?
>
u32 H(u32 P, u32 I);
int P(u32 x)
{
int Halt_Status = H(x, x);
if (Halt_Status)
HERE: goto HERE;
return Halt_Status;
}
int main()
{
H(P,P);
}
I am going to have to go through my code and standardize my names.
H(P,P) was the original name. Then I had to make a one parameter
version, a version that is identical to H, except P does not call
it and then versions using different algorithms. People have never
been able to understand the different algorithm.
typedef void (*ptr)();
typedef int (*ptr2)();
int HH(ptr2 P, ptr2 I); // used with int D(ptr2 P) that calls HH
int HH1(ptr2 P, ptr2 I); // used with int D(ptr2 P) that calls HH
int HHH(ptr P); // used with void DDD() that calls HHH
int HHH1(ptr P); // used with void DDD() that calls HHH
*The different algorithm version has been deprecated*
int H(ptr2 , ptr2 I); // used with int D(ptr2 P) that calls H
int H1(ptr2 P, ptr2 I); // used with int D(ptr2 P) that calls H
*It is much easier for people to see the infinite recursion*
*behavior pattern when they see it actually cycle through the*
*same instructions twice*
The H1, HH1, HHH1 versions are identical to H, HH, HHH
except that their input does not call them.
When we stipulate that the only measure of a correct emulation is the semantics of the x86 programming language then we see that when DDD is correctly emulated by H0 that its call to H0(DDD) cannot possibly return.
*HHH and HHH1 are named H0 and H1 in the paper*
When we stipulate that the only measure of a correct emulation
is the semantics of the x86 programming language then we see
that when DDD is correctly emulated by H0 that its call to
H0(DDD) cannot possibly return.
_DDD()
[00002172] 55 push ebp ; housekeeping
[00002173] 8bec mov ebp,esp ; housekeeping
[00002175] 6872210000 push 00002172 ; push DDD
[0000217a] e853f4ffff call 000015d2 ; call H0(DDD)
[0000217f] 83c404 add esp,+04
[00002182] 5d pop ebp
[00002183] c3 ret
Size in bytes:(0018) [00002183]
When we define H1 as identical to H0 except that DDD does not
call H1 then we see that when DDD is correctly emulated by H1
that its call to H0(DDD) does return. This is the same behavior
as the directly executed DDD().
Les messages affichés proviennent d'usenet.