Skipper Dimuth Karunaratne battled through back pain to extend Sri Lanka's second-innings lead to 323 after key strikes by Pakistan's bowlers in the second Test on Tuesday.
The hosts reached 176-5 when bad light stopped play early on day three, with stumps called in Galle after more than half an hour's wait for conditions to improve.
Spinner Ramesh Mendis had claimed a five-wicket haul to help bowl out tourists Pakistan for 231 in the opening session, with the hosts at a lead of 147 going into their second innings.
Sri Lanka were in trouble at 117-5 when Karunaratne, who stayed off the field during Pakistan's innings, and De Silva got down to the grind.
De Silva took on the opposition bowlers and hit six boundaries with Karunaratne happy to play anchor.
Pakistan's innings ended after the tourists resumed the day on 191-7, in reply to Sri Lanka's first innings of 378.
Off-spinner Ramesh sent back Nauman Ali and then trapped overnight batsman Yasir lbw for 26 to record a third five-wicket haul in his 10th Test to wrap up the innings.