Re: how to realize long jump instruction in ia 64 assebly language?
"ChenMingChun" <[email protected]> Fri, 17 Feb 2006 12:04:25 +0800
| Newsgroups | gmane.linux.redhat.ia64.general |
|---|---|
| Message-ID | <00d701c63377$3eab5b20$8004a8c0@liangjianhua> |
This is a multi-part message in MIME format.
------=_NextPart_000_00D3_01C633BA.4BE04380
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_00D4_01C633BA.4BE04380"
------=_NextPart_001_00D4_01C633BA.4BE04380
Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64
aGVsbG8NCg0KICAgbWF5YmUgdGhpcyBkZXNjcmlwdGlvbiBpcyBub3QgY2xlYXIuDQogDQogICBp
IHdyaXRlIGEgZmlsZSBteWxkLmMgaW4gd2hpY2ggIHRoZSBkeW5hbWljIGxpbmtlciAoL2xpYi9s
ZC1saW51eC1pYTY0LnNvLjIpIG9mIHRoZSBsaW51eCBzeXN0ZW0gaXMgbW1hcCgpZWQgLg0KdGhl
biB0cmFuc2ZlciB0aGUgY29udHJvbCB0byB0aGUgbW1hcCgpZWQgIGR5bmFtaWMgbGlua2VyLiBt
eSBwdXJwb3NlIGlzIHRvIGRvIHNvbWV0aGluZyBlbHNlIGJlZm9yZSB0aGUgZXhlY3V0aW9uIA0K
b2YgdGhlIHN5c3RlbSBkeW5hbWljIGxpbmtlci4NCg0KdGhlIHNwZWNpZmljIGRpc2NyaXB0aW9u
IG9mIG15bGQuc28gaXMgYXMgZm9sbG93Og0KDQogICAgICAgICAgIDEuIG1tYXAgdGhlIGxkLWxp
bnV4LWlhNjQuc28uMiB0byB0aGUgbWVtb3J5IC4NCiAgICAgICAgICAgRm9yIGVhY2ggUFRfTE9B
RCBzZWdtZW50IGluIHRoZSBwcm9ncmFtIGhlYWRlciB0YWJsZSwgDQogdGhlIGxvYWRlciBlbnN1
cmVzIHRoYXQgdGhlIEVMRiBpbWFnZSBmcm9tIHBfb2Zmc2V0IGZvciBwX2ZpbGVzeg0KIGJ5dGVz
IGlzIGNvcGllZCBpbnRvIGEgbWVtb3J5IGJ1ZmZlciAod2l0aCBwX2ZsYWdzIHBlcm1pc3Npb25z
KSANCiBhdCBwX3ZhZGRyIG9mIHBfbWVtc3ogKGFsaWduZWQgdG8gcF9hbGlnbikgYnl0ZXMuIA0K
ICAgICAgICAgICAyLnNldCB0aGUgc3RhY2suDQogICAgICAgICAgIHRoaXMgaXMgdGhlIGJsdWVw
cmludDoNCiAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KICAgICAgICAgICAgICAgICAgICAgICAgWyAwIF0gIDwtLSB0b3Agb2YgdGhlIHN0YWNrDQog
ICAgICAgICAgICAgICAgICAgICAgICBbIGVudnAgc3RyaW5ncyBdDQogICAgICAgICAgICAgICAg
ICAgICAgICBbIDAgXQ0KICAgICAgICAgICAgICAgICAgICAgICAgWyBhcmd2IHN0cmluZ3MgXQ0K
ICAgICAgICAgICAgICAgICAgICAgICAgWyAwIF0NCiAgICAgICAgICAgICAgICAgICAgICAgIFsg
YXV4diBdDQogICAgICAgICAgICAgICAgICAgICAgICBbIDAgXQ0KICAgICAgICAgICAgICAgICAg
ICAgICAgWyBlbnZwIF0NCiAgICAgICAgICAgICAgICAgICAgICAgIFsgMCBdDQogICAgICAgICAg
ICAgICAgICAgICAgICBbIGFyZ3YgXQ0KICAgICAgICAgICAgICAgICAgICAgICAgWyBhcmdjIF0g
PC0tIHN0YWNrIHBvaW50ZXINCiAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQ0KICAgICAgICAgIDMudHJhbnNmZXIgdGhlIGNvbnRyb2wNCg0KICAgICAg
ICAgYWRkcj1lbnRyeSBwb2ludC4gDQogICAgICAgYXNtKCJcdGptcCAgKiUwXG4iIDo6ICJyIiAo
YWRkcikpDQogICAgICAgICAgIA0KDQoNCg0KI2luY2x1ZGU8c3RkaW8uYz4NCmludCBtYWluKCkN
CnsNCiAgcHJpbnRmKCJ0aGlzIGlzIHRlc3RcbiIpOw0KICByZXR1cm4gMDsNCn0NCg0KdGhlIGFi
b3ZlIGlzIHRlc3QuYw0KDQoNCiAgdGhlbiBpIGNvbXBpbGVkIG15bGQuYyBhcyBmb2xsb3c6DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZ2NjIC1vIG15bGQuc28gbXlsZC5jIC1z
dGF0aWMuc3RpbGwgaSB3cml0ZSBhIHRlc3QgZmlsZSB0ZXN0LmMNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJWdjYyAtV2wsLS1keW5hbWljLWxpbmtld3IgLi9teWxkLnNvIC1vIHRl
c3QgdGVzdC5jDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUuL3Rlc3QNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJXRoaXMgaXMgdGVzdA0KDQoNCmluIElBMzIgb3Ig
eDg2XzY0IGl0IHByaW50cyAidGhpcyBpcyB0ZXN0Ii5pdCdzIG9rLg0KDQoNCmJ1dCBpbiBJQTY0
ICxpIHRoaW5rIHNldmVyYWwgZGlmZmVyZW5jZXMgYmV0d2VlbiAgSUEzMiBhbmQgSUE2NC4NCiAg
ICAgICAxLnRoZSBzcGFjZSBvZiBtZW1vcnkgaXMgZGl2aWRlZCBpbnRvIDggcmVnaW9ucy4gd2Ug
bXVzdCBtb2RpZnkgbGQgc2NyaXB0IHRvIGNvbXBpbGUgbXlsZC5jIHNvIHRoYXQgdGhlIGRhdGEg
DQpzZWdtZW50IGFuZCB0ZXh0IHNlZ21lbnQgYXJlIGxvYWRlZCBpbnRvIHJlZ2lvbiAxIDB4MjAw
MDAwMDAwMDAwMDAwMCAtMHg0MDAwMDAwMDAwMDAwMDAwLG90aGVyd2lzZSBpdCBtaWdodCBiZSAN
CmhhbmRpbmcgdXAgd2hlbiBteWxkLnNvIHdhcyBhcyB0aGUgZHluYW1pYyAgbGlua2VyLg0KIA0K
ICAgICAgIDIucjEyIGluIElBNjQgaXMgZXF1YWwgdG8gdGhlIHNwIGluIElBMzINCg0KICAgICAg
IDMudGhlIElBIDY0IGFzc2VtYmx5IGxhbmd1YWdlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIElB
MzIuIHRoZSBqdW1wIGluc3RydWN0aW9ucyBpcyBhcyBmb2xsb3c6DQogICAgIHRoZSBlbnRyeSBw
b2ludCBpcyAweDIwMDAwMDAwMDAxM2FjOTAuYW5kIHdoZW4gZGVidWdnaW5nIHRoZSBteWxkLnNv
IHdpdGggZ2RiICx0aGUgdGhlIGluc3R1Y3Rpb24gIDB4MjAwMDAwMDAwMDEzYWM5MA0KaXMgdGhl
IHNhbWUgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gb2YgIF9zdGFydCBvZiBsZC1saW51eC1pYTY0LnNv
LjIuDQogICAgIGFzbSgibW92bCByMT0weDIwMDAwMDAwMDAxM2FjOTBcbiIpOw0KICAgICBhc20o
Im1vdiBiNj1yMSIpOw0KICAgICBhc20oImJyICBiNiIpOw0KYnV0IHVuZm9ydHVuYXRlbHksaXQg
ZG9lc24ndCBwcmludCAidGhpcyBpcyB0ZXN0Ii4NCg0KDQp3aHk/DQp0aGFuayB1IHZlcnkgbXVj
aC4NCg0KdGhlIGF0dGNobWVudCBpcyB0aGUgc291cmNlIGNvZGUgDQoNCg0KICAtLS0tLSBPcmln
aW5hbCBNZXNzYWdlIC0tLS0tIA0KICBGcm9tOiBDaGVuTWluZ0NodW4gDQogIFRvOiBpYTY0LWxp
c3RAcmVkaGF0LmNvbSANCiAgU2VudDogVGh1cnNkYXksIEZlYnJ1YXJ5IDE2LCAyMDA2IDEwOjA4
IEFNDQogIFN1YmplY3Q6IGhvdyB0byByZWFsaXplIGxvbmcganVtcCBpbnN0cnVjdGlvbiBpbiBp
YSA2NCBhc3NlYmx5IGxhbmd1YWdlPw0KDQoNCiAgaGVsbG8NCg0KICAgICBpIHdyb3RlICBhbiBl
bGYgZmlsZSBjYWxsZWQgbXlsZC5zbyBpbiB3aGljaCBhbm90aGVyIGVsZiBmaWxlIGlzIG1hcHBl
ZCAsDQogIHdoaWNoIGlzIHRoZSBkeW5hbWljIGxpbmtlciBvZiB0aGUgbGludXggc3lzdGVtICBp
biAvbGliLiB0aGVuIGkgY29tcGlsZWQgYSB0ZXN0IGZpbGUgd2l0aCANCiAgdGhlIG15bGQuc28g
YXMgdGhlIGR5bmFtaWMgbGlua2VyLg0KICAlZ2NjIC1XbCwtLWR5bmFtaWMtbGlua2VyIC4vbXls
ZC5zbyAtbyB0ZXN0IHRlc3QuYw0KDQogIGknZCBsaWtlIHRvIHRyYW5zZmVyIHRoZSBjb250cm9s
IHRvIHRoZSBtYXBwZWQgZmlsZSAob3JpZ2luYWwgbGQpIHVzaW5nIGFzc2VtYmx5IGxhbmd1YWdl
IGZyb20gbXlsZC5zby4NCg0KICBhcyBpdCBpcyBrbm93biB0byBhbGwsSUEtNjQgYXNzZW1ibHkg
bGFuZ3VhZ2UgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20geDg2Lg0KICBzdXBwb3NlIHRoZSBlbnRy
eSBwb2ludCBvZiB0aGUgbWFwcGVkIGZpbGUgaXMgMHgyMDAwMDAwMDAwMTNhYzkwLHRoZSBqdW1w
IGNvZGUNCiAgaSB3cm90ZSBpcyBhcyBmb2xsb3c6DQogICBhc20oIm1vdmwgcjE9MHgyMDAwMDAw
MDAwMTNhYzkwXG4iKTsNCiAgIGFzbSgibW92IGI2PXIxIik7DQogICBhc20oImJyICBiNiIpOw0K
DQogIHdoZW4gdXNpbmcgZ2RiIHRvIGRlYnVnICxpdCBkaWQgdHJhbnNmZXIgdGhlIGNvbnRyb2wg
dG8gdGhlIG1hcHBlZCBmaWxlKG9yaWdpbmFsIGxkKS4NCiAgYnV0IHdoZW4gZXhlY3V0aW5nIGkg
ZG9lc24ndCB3b3JrLg0KDQogIHRoYW4gdSB2ZXJ5IG11Y2guDQo=
------=_NextPart_001_00D4_01C633BA.4BE04380
Content-Type: text/html;
charset="gb2312"
Content-Transfer-Encoding: base64
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PWdiMjMxMiI+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNi4w
MC4yOTAwLjI4MDIiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8
Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPjxGT05UIHNpemU9Mj5oZWxsbzwvRk9OVD48L0RJ
Vj4NCjxESVY+PEZPTlQgc2l6ZT0yPjwvRk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgc2l6
ZT0yPiZuYnNwOyZuYnNwOyZuYnNwO21heWJlIHRoaXMgZGVzY3JpcHRpb24gaXMgbm90IA0KY2xl
YXIuPC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+Jm5ic3A7PC9GT05UPjwvRElWPg0K
PERJVj48Rk9OVCBzaXplPTI+Jm5ic3A7Jm5ic3A7IGkgd3JpdGUgYSBmaWxlIG15bGQuYyBpbiB3
aGljaCZuYnNwOyB0aGUgZHluYW1pYyANCmxpbmtlciAoL2xpYi9sZC1saW51eC1pYTY0LnNvLjIp
IG9mIHRoZSBsaW51eCBzeXN0ZW0gaXMgDQptbWFwKCllZCZuYnNwOy48L0ZPTlQ+PC9ESVY+DQo8
RElWPjxGT05UIHNpemU9Mj50aGVuIHRyYW5zZmVyIHRoZSBjb250cm9sIHRvIHRoZSBtbWFwKCll
ZCZuYnNwOyBkeW5hbWljIA0KbGlua2VyLiBteSBwdXJwb3NlIGlzIHRvIGRvIHNvbWV0aGluZyBl
bHNlIGJlZm9yZSB0aGUgZXhlY3V0aW9uIDwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0y
Pm9mIHRoZSBzeXN0ZW0gZHluYW1pYyBsaW5rZXIuPC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBz
aXplPTI+PC9GT05UPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+dGhlIHNwZWNpZmlj
IGRpc2NyaXB0aW9uIG9mIG15bGQuc28gaXMgYXMgZm9sbG93OjwvRk9OVD48L0RJVj4NCjxESVY+
PEZPTlQgc2l6ZT0yPjwvRk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgDQpzaXplPTI+Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7MS4gbW1hcCANCnRoZSBsZC1saW51eC1pYTY0LnNvLjIgdG8gdGhlIG1lbW9yeSAuPC9G
T05UPjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KRm9yIGVhY2ggUFRfTE9BRCBzZWdt
ZW50IGluIHRoZSBwcm9ncmFtIGhlYWRlciB0YWJsZSwgPC9GT05UPjwvRElWPg0KPERJVj48Rk9O
VCBzaXplPTI+Jm5ic3A7dGhlIGxvYWRlciBlbnN1cmVzIHRoYXQgdGhlIEVMRiBpbWFnZSBmcm9t
IHBfb2Zmc2V0IGZvciANCnBfZmlsZXN6PC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+
Jm5ic3A7Ynl0ZXMgaXMgY29waWVkIGludG8gYSBtZW1vcnkgYnVmZmVyICh3aXRoIDwvRk9OVD48
Rk9OVCANCnNpemU9Mj5wX2ZsYWdzIHBlcm1pc3Npb25zKSA8L0ZPTlQ+PC9ESVY+DQo8RElWPjxG
T05UIHNpemU9Mj4mbmJzcDthdCBwX3ZhZGRyIG9mIHBfbWVtc3ogKGFsaWduZWQgdG8gcF9hbGln
bikgYnl0ZXMuIA0KPC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KMi5zZXQg
dGhlIHN0YWNrLjwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0yPiZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCnRoaXMgaXMg
dGhlIGJsdWVwcmludDo8L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj4mbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsgDQpbIDAgXSZuYnNwOyAmbHQ7LS0gdG9wIG9mIHRoZSANCnN0YWNrPEJSPiZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyANClsgZW52cCBzdHJpbmdzIA0KXTxCUj4mbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsgDQpbIDAgDQpdPEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANClsgYXJndiBzdHJp
bmdzIA0KXTxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQpbIDAgDQpdPEJSPiZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyANClsgYXV4diANCl08QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
IA0KWyAwIA0KXTxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQpbIGVudnAgDQpdPEJSPiZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANClsgMCANCl08QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7IA0KWyBhcmd2IA0KXTxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQpbIGFyZ2MgXSAm
bHQ7LS0gc3RhY2sgDQpwb2ludGVyPEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tPC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KMy50cmFuc2ZlciB0aGUg
Y29udHJvbDwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0yPjwvRk9OVD4mbmJzcDs8L0RJ
Vj4NCjxESVY+PEZPTlQgDQpzaXplPTI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7YWRkcj1lbnRyeSANCnBvaW50LiZuYnNwOzwvRk9OVD48L0RJ
Vj4NCjxESVY+PEZPTlQgc2l6ZT0yPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwO2FzbSgiXHRqbXAmbmJzcDsgDQoqJTBcbiIgOjogInIiIChhZGRyKSk8L0ZPTlQ+PC9E
SVY+DQo8RElWPjxGT05UIHNpemU9Mj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQo8L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIHNp
emU9Mj48L0ZPTlQ+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj48L0ZPTlQ+Jm5ic3A7
PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj48L0ZPTlQ+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05U
IHNpemU9Mj4NCjxESVY+PEZPTlQgc2l6ZT0yPiNpbmNsdWRlJmx0O3N0ZGlvLmMmZ3Q7PC9GT05U
PjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+aW50IG1haW4oKTwvRk9OVD48L0RJVj4NCjxESVY+
PEZPTlQgc2l6ZT0yPns8L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj4mbmJzcDsgcHJp
bnRmKCJ0aGlzIGlzIHRlc3RcbiIpOzwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0yPiZu
YnNwOyZuYnNwO3JldHVybiAwOzwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0yPn08L0ZP
TlQ+PC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj50aGUgYWJvdmUgaXMgdGVzdC5jPC9E
SVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj4mbmJzcDs8L0RJVj48L0ZPTlQ+PC9ESVY+DQo8
RElWPjxGT05UIHNpemU9Mj4mbmJzcDsgdGhlbiBpIGNvbXBpbGVkIG15bGQuYyBhcyBmb2xsb3c6
PC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCANCnNpemU9Mj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQolIGdj
YyAtbyBteWxkLnNvIG15bGQuYyAtc3RhdGljLnN0aWxsIGkgd3JpdGUgYSB0ZXN0IGZpbGUgdGVz
dC5jPC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCANCnNpemU9Mj4mbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQol
Z2NjIC1XbCwtLWR5bmFtaWMtbGlua2V3ciAuL215bGQuc28gLW8gdGVzdCB0ZXN0LmM8L0ZPTlQ+
PC9ESVY+DQo8RElWPjxGT05UIA0Kc2l6ZT0yPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyUuL3Rlc3Q8
L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIA0Kc2l6ZT0yPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCiV0aGlz
IGlzIHRlc3Q8L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj48L0ZPTlQ+Jm5ic3A7PC9E
SVY+DQo8RElWPjxGT05UIHNpemU9Mj48L0ZPTlQ+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05UIHNp
emU9Mj5pbiBJQTMyIG9yIHg4Nl82NCBpdCBwcmludHMgInRoaXMgaXMgdGVzdCIuaXQncyANCm9r
LjwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0yPjwvRk9OVD4mbmJzcDs8L0RJVj4NCjxE
SVY+PEZPTlQgc2l6ZT0yPjwvRk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0yPmJ1
dCBpbiBJQTY0ICxpIHRoaW5rJm5ic3A7c2V2ZXJhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuJm5ic3A7
IA0KSUEzMiBhbmQgSUE2NC48L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj4mbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgMS50aGUgc3BhY2Ugb2YgbWVtb3J5IGlzIA0K
ZGl2aWRlZCBpbnRvIDggcmVnaW9ucy4gd2UgbXVzdCBtb2RpZnkgbGQgc2NyaXB0IHRvIGNvbXBp
bGUgbXlsZC5jIHNvIHRoYXQgdGhlIA0KZGF0YSA8L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIHNp
emU9Mj5zZWdtZW50IGFuZCB0ZXh0IHNlZ21lbnQgYXJlIGxvYWRlZCBpbnRvIHJlZ2lvbiAxIA0K
MHgyMDAwMDAwMDAwMDAwMDAwIC0weDQwMDAwMDAwMDAwMDAwMDAsb3RoZXJ3aXNlIGl0IG1pZ2h0
IGJlIDwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0yPmhhbmRpbmcgdXAgd2hlbiBteWxk
LnNvIHdhcyZuYnNwO2FzIHRoZSBkeW5hbWljIA0KJm5ic3A7bGlua2VyLjwvRk9OVD48L0RJVj4N
CjxESVY+PEZPTlQgc2l6ZT0yPiZuYnNwOzwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0y
PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAyLnIxMiBpbiBJQTY0IGlzIGVx
dWFsIHRvIA0KdGhlIHNwIGluIElBMzI8L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj48
L0ZPTlQ+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj4mbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsgMy50aGUgSUEgNjQgYXNzZW1ibHkgDQpsYW5ndWFnZSBpcyBxdWl0
ZSBkaWZmZXJlbnQgZnJvbSBJQTMyLiB0aGUganVtcCBpbnN0cnVjdGlvbnMgaXMgYXMgDQpmb2xs
b3c6PC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7IHRoZSBlbnRyeSBwb2ludCBpcyANCjB4MjAwMDAwMDAwMDEzYWM5MC5hbmQgd2hlbiBkZWJ1
Z2dpbmcgdGhlIG15bGQuc28gd2l0aCBnZGImbmJzcDssdGhlIHRoZSANCmluc3R1Y3Rpb24mbmJz
cDsgMHgyMDAwMDAwMDAwMTNhYzkwPC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+aXMg
dGhlIHNhbWUgd2l0aCZuYnNwO3RoZSZuYnNwO2luc3RydWN0aW9uIA0Kb2YmbmJzcDsmbmJzcDtf
c3RhcnQgb2YgbGQtbGludXgtaWE2NC5zby4yLjwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgc2l6
ZT0yPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBhc20oIm1vdmwgDQpyMT0weDIwMDAwMDAwMDAx
M2FjOTBcbiIpOzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYXNtKCJtb3YgDQpiNj1yMSIp
OzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7YXNtKCJiciZuYnNwOyBiNiIpOzwvRk9OVD48
L0RJVj4NCjxESVY+PEZPTlQgc2l6ZT0yPmJ1dCB1bmZvcnR1bmF0ZWx5LGl0IGRvZXNuJ3QgcHJp
bnQgInRoaXMgaXMgDQp0ZXN0Ii48L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj48L0ZP
TlQ+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05UIHNpemU9Mj48L0ZPTlQ+Jm5ic3A7PC9ESVY+DQo8
RElWPjxGT05UIHNpemU9Mj53aHk/PC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+dGhh
bmsgdSB2ZXJ5IG11Y2guPC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+PC9GT05UPiZu
YnNwOzwvRElWPg0KPERJVj48Rk9OVCBzaXplPTI+dGhlIGF0dGNobWVudCBpcyB0aGUgc291cmNl
IGNvZGUgPC9ESVY+DQo8RElWPjxCUj48L0RJVj48L0ZPTlQ+DQo8QkxPQ0tRVU9URSBkaXI9bHRy
IA0Kc3R5bGU9IlBBRERJTkctUklHSFQ6IDBweDsgUEFERElORy1MRUZUOiA1cHg7IE1BUkdJTi1M
RUZUOiA1cHg7IEJPUkRFUi1MRUZUOiAjMDAwMDAwIDJweCBzb2xpZDsgTUFSR0lOLVJJR0hUOiAw
cHgiPg0KICA8RElWIHN0eWxlPSJGT05UOiA5cHQgy87M5SI+LS0tLS0gT3JpZ2luYWwgTWVzc2Fn
ZSAtLS0tLSA8L0RJVj4NCiAgPERJViBzdHlsZT0iQkFDS0dST1VORDogI2U0ZTRlNDsgRk9OVDog
OXB0IMvOzOU7IGZvbnQtY29sb3I6IGJsYWNrIj48Qj5Gcm9tOjwvQj4gDQogIDxBIHRpdGxlPWNo
ZW5tY0BuYW5qaW5nLWZuc3QuY29tIA0KICBocmVmPSJtYWlsdG86Y2hlbm1jQG5hbmppbmctZm5z
dC5jb20iPkNoZW5NaW5nQ2h1bjwvQT4gPC9ESVY+DQogIDxESVYgc3R5bGU9IkZPTlQ6IDlwdCDL
zszlIj48Qj5Ubzo8L0I+IDxBIHRpdGxlPWlhNjQtbGlzdEByZWRoYXQuY29tIA0KICBocmVmPSJt
YWlsdG86aWE2NC1saXN0QHJlZGhhdC5jb20iPmlhNjQtbGlzdEByZWRoYXQuY29tPC9BPiA8L0RJ
Vj4NCiAgPERJViBzdHlsZT0iRk9OVDogOXB0IMvOzOUiPjxCPlNlbnQ6PC9CPiBUaHVyc2RheSwg
RmVicnVhcnkgMTYsIDIwMDYgMTA6MDggDQogIEFNPC9ESVY+DQogIDxESVYgc3R5bGU9IkZPTlQ6
IDlwdCDLzszlIj48Qj5TdWJqZWN0OjwvQj4gaG93IHRvIHJlYWxpemUgbG9uZyBqdW1wIGluc3Ry
dWN0aW9uIA0KICBpbiBpYSA2NCBhc3NlYmx5IGxhbmd1YWdlPzwvRElWPg0KICA8RElWPjxCUj48
L0RJVj4NCiAgPERJVj48Rk9OVCBzaXplPTI+DQogIDxESVY+aGVsbG88L0RJVj4NCiAgPERJVj4m
bmJzcDs8L0RJVj4NCiAgPERJVj4mbmJzcDsmbmJzcDsgaSB3cm90ZSZuYnNwOyBhbiBlbGYgZmls
ZSBjYWxsZWQgbXlsZC5zbyBpbiB3aGljaCBhbm90aGVyIA0KICBlbGYgZmlsZSZuYnNwO2lzIG1h
cHBlZCZuYnNwOyw8L0RJVj4NCiAgPERJVj53aGljaCBpcyB0aGUmbmJzcDtkeW5hbWljJm5ic3A7
bGlua2VyIG9mIHRoZSANCiAgbGludXgmbmJzcDtzeXN0ZW0mbmJzcDsmbmJzcDtpbiAvbGliLiB0
aGVuIGkgY29tcGlsZWQgYSB0ZXN0IGZpbGUgd2l0aCA8L0RJVj4NCiAgPERJVj50aGUgbXlsZC5z
byBhcyB0aGUgZHluYW1pYyBsaW5rZXIuPC9ESVY+DQogIDxESVY+JWdjYyAtV2wsLS1keW5hbWlj
LWxpbmtlciAuL215bGQuc28gLW8gdGVzdCB0ZXN0LmM8L0RJVj4NCiAgPERJVj4mbmJzcDs8L0RJ
Vj4NCiAgPERJVj5pJ2QgbGlrZSB0byB0cmFuc2ZlciB0aGUgY29udHJvbCB0byB0aGUgbWFwcGVk
IGZpbGUgKG9yaWdpbmFsIA0KICBsZCkmbmJzcDt1c2luZyBhc3NlbWJseSBsYW5ndWFnZSBmcm9t
IG15bGQuc28uPC9ESVY+DQogIDxESVY+Jm5ic3A7PC9ESVY+DQogIDxESVY+YXMgaXQgaXMga25v
d24gdG8gYWxsLElBLTY0IGFzc2VtYmx5IGxhbmd1YWdlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9t
IA0KICB4ODYuPC9ESVY+DQogIDxESVY+c3VwcG9zZSB0aGUgZW50cnkgcG9pbnQgb2YgdGhlIG1h
cHBlZCBmaWxlIGlzIDB4MjAwMDAwMDAwMDEzYWM5MCx0aGUganVtcCANCiAgY29kZTwvRElWPg0K
ICA8RElWPmkgd3JvdGUgaXMgYXMgZm9sbG93OjwvRElWPg0KICA8RElWPiZuYnNwO2FzbSgibW92
bCByMT0weDIwMDAwMDAwMDAxM2FjOTBcbiIpOzxCUj4mbmJzcDthc20oIm1vdiANCiAgYjY9cjEi
KTs8QlI+Jm5ic3A7YXNtKCJiciZuYnNwOyBiNiIpOzxCUj48L0RJVj4NCiAgPERJVj53aGVuIHVz
aW5nIGdkYiB0byBkZWJ1ZyAsaXQgZGlkIHRyYW5zZmVyIHRoZSBjb250cm9sIHRvIHRoZSBtYXBw
ZWQgDQogIGZpbGUob3JpZ2luYWwgbGQpLjwvRElWPg0KICA8RElWPmJ1dCB3aGVuIGV4ZWN1dGlu
ZyBpIGRvZXNuJ3Qgd29yay48L0RJVj4NCiAgPERJVj4mbmJzcDs8L0RJVj4NCiAgPERJVj50aGFu
IHUgdmVyeSBtdWNoLjwvRElWPjwvRk9OVD48L0RJVj4NCiAgPERJVj48Rk9OVCBzaXplPTI+PC9G
T05UPiZuYnNwOzwvRElWPjwvQkxPQ0tRVU9URT48L0JPRFk+PC9IVE1MPg0K
------=_NextPart_001_00D4_01C633BA.4BE04380--
------=_NextPart_000_00D3_01C633BA.4BE04380
Content-Type: application/octet-stream;
name="myld.c"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="myld.c"
#include <elf.h>=0A=
#include <fcntl.h>=0A=
#include <sys/stat.h>=0A=
#include <sys/mman.h>=0A=
#include <stdio.h>=0A=
#include <unistd.h>=0A=
#include <string.h>=0A=
#include <stdlib.h>=0A=
#include <unistd.h>=0A=
#include <sys/stat.h>=0A=
#include <errno.h>=0A=
=0A=
=0A=
=0A=
=0A=
#define is_loaded(p) ((p)->p_type =3D=3D PT_LOAD ? 1 : 0)=0A=
#define is_txt_segt(p) ((is_loaded(p)) && (p)->p_flags =3D=3D =
(PF_X|PF_R))=0A=
#define is_data_segt(p) ((is_loaded(p)) && (p)->p_flags =3D=3D =
(PF_W|PF_R))=0A=
=0A=
#define FLAGS (MAP_PRIVATE|MAP_ANONYMOUS)=0A=
=0A=
#define ALIGN(k, v) (((k)+((v)-1))&(~((v)-1)))=0A=
=0A=
#define allocate(size) \=0A=
mmap(0, (size), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, =
-1, 0)=0A=
=0A=
#define set_stack(rsp) asm("\tmov r12=3D%0\n" :: "r"(rsp-16))=0A=
=0A=
=0A=
void * global_ptr =3D NULL;=0A=
void * global_base =3D NULL;=0A=
=0A=
#define NUM_OF_AUX 7=0A=
//extern char **environ;=0A=
char *environ[] =3D { "USER=3Dbaiwd", "PATH=3D/home/baiwd", NULL };=0A=
=0A=
typedef struct ul_args {=0A=
size_t size;=0A=
int cnt;=0A=
char tab[1];=0A=
} ul_args_t;=0A=
=0A=
ul_args_t *=0A=
ul_save_args(int argc, char **argv)=0A=
{=0A=
struct ul_args * args;=0A=
char * str;=0A=
size_t len;=0A=
int i;=0A=
=0A=
/* just a faked argv, because glibc ld will omit the argv[0] and begin =0A=
* processing from argv[1]=0A=
*/ =0A=
char *firstarg =3D "lpgld.so";=0A=
=0A=
for (i =3D 0, len =3D 0; i < argc; i++)=0A=
len +=3D strlen(argv[i]) + 1;=0A=
len +=3D strlen(firstarg) + 1;=0A=
args =3D allocate(len + sizeof(*args));=0A=
=0A=
args->size =3D len;=0A=
//args->cnt =3D argc;=0A=
args->cnt =3D argc + 1;=0A=
=0A=
str =3D args->tab;=0A=
strcat(str, firstarg);=0A=
str +=3D strlen(str) + 1;=0A=
for (i =3D 0; i < argc; i++, str +=3D strlen(str) + 1)=0A=
strcat(str, argv[i]); =0A=
=0A=
/*=0A=
for (i =3D 0, str =3D args->tab; i < argc; i++, str +=3D strlen(str) + =
1)=0A=
strcat(str, argv[i]);=0A=
*/=0A=
=0A=
return (args);=0A=
}=0A=
=0A=
void *=0A=
ul_setup_stack(void * stack_top, ul_args_t *args, ul_args_t *envp,=0A=
Elf64_Ehdr * elf, Elf64_Ehdr *interp, char **argv, char **env)=0A=
{=0A=
Elf64_auxv_t * aux;=0A=
char * addr, * str, **ptr, * esp, **oldptr;=0A=
int argsize, i;=0A=
int argc, envc;=0A=
=0A=
argsize =3D 16; /* argc */=0A=
=0A=
argsize +=3D args->cnt * 16; /* argv */=0A=
argsize +=3D 16; /* NULL */=0A=
=0A=
argsize +=3D envp->cnt * 16; /* envp */=0A=
argsize +=3D 16; /* NULL */=0A=
=0A=
//argsize +=3D sizeof(Elf64_auxv_t) * NUM_OF_AUX;=0A=
=0A=
argsize +=3D args->size; /* argv strings */=0A=
argsize +=3D 16; /* argv_strings [NULL] envp_strings */=0A=
=0A=
argsize +=3D envp->size; /* envp strings */=0A=
argsize +=3D 16; /* NULL */=0A=
=0A=
argsize +=3D 16; /* stack_top =3D=3D NULL */=0A=
=0A=
/* align to a 4 byte boundary | XXX kernel uses 16 byte alignment */=0A=
argsize =3D (argsize + 16-1) & ~(16-1);=0A=
=0A=
/* END CALCULATIONS, BEGIN SETTING UP THE STACK */=0A=
esp =3D (char *)(stack_top - argsize);=0A=
memset(esp, 0 ,argsize);=0A=
=0A=
memcpy(esp, &args->cnt, 16); /* argc */=0A=
=0A=
ptr =3D (char **)(esp + 16); /* ptr =3D &argv[0] */=0A=
=0A=
//addr =3D (char *)ptr;=0A=
=0A=
addr =3D (char *)ptr + ((args->cnt + 1) * 16) +=0A=
((envp->cnt + 1) * 16);=0A=
=0A=
=0A=
/* addr =3D [argv][0][envp][0][auxv] =0A=
addr =3D (void *)ptr + (((args->cnt + 1) * sizeof(unsigned long)) +=0A=
((envp->cnt + 1) * sizeof(unsigned long)) +=0A=
(NUM_OF_AUX * sizeof(Elf64_auxv_t))+=0A=
sizeof(unsigned long));*/=0A=
=0A=
argc =3D args->cnt;=0A=
envc =3D envp->cnt;=0A=
=0A=
oldptr =3D ptr;=0A=
//memcpy(ptr, argv, (argc + 1) * sizeof(unsigned long));=0A=
=0A=
/* set up argv[] and the argv strings */=0A=
for (i =3D 0, str =3D args->tab; i < args->cnt; i++, str +=3D =
strlen(str)+1) {=0A=
printf("args: %s\n", str);=0A=
strncpy(addr, str, strlen(str));=0A=
argv[i] =3D addr;=0A=
*ptr++ =3D addr;=0A=
addr +=3D strlen(str) + 1;=0A=
}=0A=
*ptr++ =3D NULL;=0A=
=0A=
/* set up envp[] and the envp strings */=0A=
for (i =3D 0, str =3D envp->tab; i < envp->cnt; i++, str +=3D =
strlen(str)+1) {=0A=
strncpy(addr, str, strlen(str));=0A=
env[i] =3D addr;=0A=
*ptr++ =3D addr;=0A=
addr +=3D strlen(str) + 1;=0A=
}=0A=
*ptr++ =3D NULL;=0A=
/* set up argv and env pointer */=0A=
// memcpy(oldptr, argv, (argc + 1) * sizeof(unsigned long));=0A=
// oldptr +=3D (argc + 1) * sizeof(unsigned long);=0A=
// memcpy(oldptr, env, (envc + 1) * sizeof(unsigned long));=0A=
aux =3D (Elf64_auxv_t *) ptr;=0A=
=0A=
/* setup the AUXV */=0A=
#if 0=0A=
#define NEW_AUX_ENT(nr, id, val) \=0A=
((aux[ (nr) ].a_type =3D (id)), (aux[ (nr) ].a_un.a_val =3D =
(long)(val)))=0A=
=0A=
NEW_AUX_ENT( 5, AT_NULL, 0);=0A=
NEW_AUX_ENT( 4, AT_PAGESZ, 16384);=0A=
//NEW_AUX_ENT( 4, AT_PHDR, (char *)elf + elf->e_phoff);=0A=
NEW_AUX_ENT( 3, AT_PHDR, (void *)0X4000000000000040);=0A=
NEW_AUX_ENT( 2, AT_PHNUM, 8);=0A=
//NEW_AUX_ENT( 2, AT_BASE, interp);=0A=
NEW_AUX_ENT( 1, AT_FLAGS, 0);=0A=
NEW_AUX_ENT( 0, AT_ENTRY, (void *)0X40000000000004e0);=0A=
#endif=0A=
=0A=
return ((char *)esp);=0A=
}=0A=
=0A=
static Elf64_Ehdr *=0A=
load_elf_buf(void *elf_buf)=0A=
{=0A=
Elf64_Ehdr *e =3D (Elf64_Ehdr *) elf_buf;=0A=
Elf64_Phdr *ptab =3D (Elf64_Phdr *) ((void *)elf_buf + e->e_phoff);=0A=
Elf64_Phdr *p;=0A=
size_t tot_len =3D 0;=0A=
void * ptr, * base =3D NULL;=0A=
int i, flags;=0A=
=0A=
/* we could use e->e_type, but this way reduces our code requirement */=0A=
for (i =3D 0, p =3D ptab; i < e->e_phnum; i++, p++) { =0A=
if (!is_loaded(p))=0A=
continue;=0A=
if (is_txt_segt(p)) {=0A=
base =3D (void *)p->p_vaddr;=0A=
global_base =3D (void *)base+0x2000000000000000;=0A=
}=0A=
tot_len +=3D ALIGN(p->p_memsz, p->p_align);=0A=
}=0A=
=0A=
flags =3D base ? (FLAGS|MAP_FIXED) : FLAGS;=0A=
//flags=3DFLAGS|MAP_FIXED;=0A=
=0A=
if ((ptr =3D mmap(base, tot_len*2, PROT_NONE, flags, -1, 0)) =3D=3D =
MAP_FAILED)=0A=
return NULL;=0A=
=0A=
global_ptr =3D (void *)ptr;=0A=
for (i =3D 0, p =3D ptab; i < e->e_phnum; i++, p++) {=0A=
void * load_addr;=0A=
size_t len;=0A=
=0A=
if (!is_loaded(p))=0A=
continue;=0A=
=0A=
flags =3D 0;=0A=
=0A=
/* to reduce the code size we could rely on the fact that in =0A=
* implementation, the PF_ flags are the same as PROT_ */=0A=
if (p->p_flags & PF_X)=0A=
flags |=3D PROT_EXEC;=0A=
if (p->p_flags & PF_W)=0A=
flags |=3D PROT_WRITE;=0A=
if (p->p_flags & PF_R)=0A=
flags |=3D PROT_READ;=0A=
=0A=
/* a very ugly way of figuring out what the base load address=0A=
* of this segment is. */=0A=
load_addr =3D ptr + (((void *)p->p_vaddr-base)&~(p->p_align-1));=0A=
len =3D ALIGN(p->p_memsz, p->p_align)*2;=0A=
=0A=
if (mprotect(load_addr, len, PROT_WRITE)) {=0A=
munmap(p, tot_len);=0A=
perror("mprotect(PROT_WRITE): ");=0A=
return (NULL);=0A=
}=0A=
=0A=
/* We need the exact load address, not the rounded down=0A=
* version. Otherwis we copy to a garbage location.. */=0A=
memset(load_addr, '\0', len);=0A=
//memcpy((void *)(ptr + ((void *)p->p_vaddr - base)),(void *)elf_buf + =
p->p_offset, p->p_filesz);=0A=
=0A=
memcpy((void *)(((void *)p->p_vaddr-base)+ptr),(void *)elf_buf + =
p->p_offset,p->p_filesz);=0A=
if (mprotect(load_addr, len, flags)) {=0A=
munmap(p, tot_len);=0A=
perror("mprotect(flags): ");=0A=
return NULL;=0A=
}=0A=
}=0A=
=0A=
e =3D (Elf64_Ehdr *) ptr;=0A=
=0A=
return (e);=0A=
}=0A=
=0A=
int main(int argc, char *argv[])=0A=
{=0A=
=0A=
=0A=
int fd =3D -1;=0A=
int userprofd =3D -1;=0A=
char origld[256] =3D "/lib/ld-linux-ia64.so.2";=0A=
char *userpro =3D "./hello";=0A=
Elf64_Ehdr *ehdr =3D NULL;=0A=
Elf64_Ehdr *userehdr =3D NULL;=0A=
Elf64_Phdr *phdr =3D NULL;=0A=
Elf64_Ehdr *e =3D NULL;=0A=
void (*entry)();=0A=
struct stat stat;=0A=
struct stat userprostat;=0A=
struct ul_args * args, * envpp;=0A=
char *stack_top, *esp;=0A=
char **envp =3D environ;=0A=
int envc =3D 0; =0A=
=0A=
//system("/lib64/ld-linux-x86-64.so.2 ./hello"); =0A=
args =3D ul_save_args(argc, argv);=0A=
for (envc =3D 0 ; envp[envc] ; envc++);=0A=
//envpp =3D ul_save_args(0, NULL);=0A=
envpp =3D ul_save_args(envc, environ);=0A=
=0A=
=0A=
=0A=
=0A=
fd =3D open(origld, O_RDONLY);=0A=
if (fd =3D=3D -1) {=0A=
perror("fd open: ");=0A=
goto err;=0A=
}=0A=
=0A=
if (fstat(fd, &stat) =3D=3D -1) {=0A=
perror("fstat");=0A=
goto err;=0A=
}=0A=
=0A=
char ldmap_buf[1024*1024*2];=0A=
//ehdr =3D mmap(0x2400000000000000, stat.st_size, PROT_READ, =
MAP_PRIVATE, fd, 0);=0A=
read(fd,ldmap_buf,sizeof(ldmap_buf));=0A=
ehdr=3D(Elf64_Ehdr*)ldmap_buf;=0A=
=0A=
=0A=
//ehdr =3D mmap((void *)0x2400000000000000, stat.st_size, PROT_READ, =
MAP_PRIVATE, fd, 0);=0A=
=0A=
/* Check ELF magic-ident */=0A=
if (ehdr->e_ident[EI_MAG0] !=3D 0x7f=0A=
|| ehdr->e_ident[EI_MAG1] !=3D 'E'=0A=
|| ehdr->e_ident[EI_MAG2] !=3D 'L'=0A=
|| ehdr->e_ident[EI_MAG3] !=3D 'F'=0A=
) {=0A=
fprintf(stderr, "File type not supported\n");=0A=
goto err;=0A=
}=0A=
=0A=
/* load the dynamic linker */ =0A=
if ((e =3D load_elf_buf(ehdr)) =3D=3D NULL) {=0A=
fprintf(stderr, "Can not load elf \n");=0A=
goto err;=0A=
}=0A=
//entry =3D (void(*)())(ehdr->e_entry + (unsigned long long)(global_ptr =
- global_base));=0A=
entry =3D (void(*)())(ehdr->e_entry+0x2000000000008000);=0A=
=0A=
/* TODO : setup the stack */=0A=
//#define STACK_TOP ((void *)(0xc000000000000000))=0A=
stack_top =3D malloc(4096*1024);=0A=
=0A=
stack_top +=3D (4096*1024 -16 );=0A=
esp =3D ul_setup_stack(stack_top, args, envpp, userehdr, ehdr, =
argv, environ);=0A=
set_stack(esp); =0A=
perror("stack wrong\n");=0A=
=0A=
=0A=
/* transfer control to the new image */=0A=
//mov_r1(0x200000000000ac90);=0A=
asm("movl r1=3D0x200000000000ac90\n");=0A=
asm("mov b6=3Dr1");=0A=
asm("br b6");=0A=
perror("mov ri is wrong\n");=0A=
=0A=
err:=0A=
if (ehdr) {=0A=
munmap(ehdr, stat.st_size);=0A=
}=0A=
if (fd !=3D -1) {=0A=
close(fd);=0A=
} =0A=
=0A=
}=0A=
=0A=
=0A=
------=_NextPart_000_00D3_01C633BA.4BE04380
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
ia64-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/ia64-list
------=_NextPart_000_00D3_01C633BA.4BE04380--